谷粒商城实战笔记-227-商城业务-认证服务-SpringSession整合

一,Spring Session 简介

Spring Session 是 Spring Framework 的一部分,它提供了一个抽象层来管理分布式环境中的 HTTP Session。

Spring Session 的主要目的是使 Session 管理更加灵活和可扩展,特别是在分布式环境中。它允许将 Session 数据存储在多种后端存储系统中,如 Redis、Memcached、数据库等,从而避免了单点故障和横向扩展的问题。

Spring Session 的核心特性包括:

  • 可插拔的存储层:可以很容易地切换 Session 的存储方式,如从内存切换到 Redis。
  • 无状态服务:使得服务实例可以在集群中自由伸缩,而不必担心 Session 数据的分布问题。
  • 简化配置:提供了简单的配置选项,使得开发者可以快速启动并运行。

二,使用步骤

1. 添加依赖

首先,你需要在你的项目中添加 Spring Session 相关的依赖。如果你使用的是 Maven,可以在 pom.xml 文件中添加以下依赖:

		<dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

这里以 Redis 作为session的存储。

2. 配置 Spring Session

在认证服务的配置文件中增加如下配置,指定session的存储方式是redis。

spring.session.store-type=redis

接下来,你需要配置 Spring Session 以指定 Session 数据的存储方式。如果你使用的是 Java 配置,可以在你的配置类中添加以下配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800, redisNamespace = "spring:session")
public class HttpSessionConfig {

    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        // 自定义 Cookie 的名称、路径等
        serializer.setCookieName("SESSION");
        serializer.setDomainNamePattern(".*\\.yourdomain\\.com");
        return serializer;
    }
}

这里使用了 @EnableRedisHttpSession 注解来启用基于 Redis 的 Session 存储。你还可以通过配置类自定义 Session 的超时时间 (maxInactiveIntervalInSeconds) 和 Redis 命名空间 (redisNamespace)。

3. 配置 Redis

因为auth认证模块中已经配置了redis,所以无需配置。

spring.redis.host=192.168.56.10

4. 启用SpringSession

在启动类上添加注解@EnableRedisHttpSession

在这里插入图片描述

5. 应用 Spring Session

一旦配置完成,Spring Session 就会自动接管 Session 的管理和存储。你不需要在控制器或其他地方显式地创建或操作 Session,Spring Session 会自动处理这些细节。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;

@RestController
public class MyController {

    @GetMapping("/session")
    public String getSession(HttpSession session) {
        session.setAttribute("name", "John Doe");
        return "Hello, " + session.getAttribute("name");
    }
}

HttpSession 会在后台自动与 Spring Session 集成,可以像往常一样使用 HttpSession API。

6,测试

重新微博登录,查看redis,发现多了spring session相关的key。

在这里插入图片描述

查看auth认证服务浏览器控制台,发现cookie存储的已经不是名称为JSESSIONIDcookie

在这里插入图片描述

这些都说明Spring Session已经整合成功。

7,product模块配置spring session

前面是在auth模块配置了spring session,将session保存在了redis中。

首页是属于product模块的,相当于product模块要从redis中取出session,所以也必须配置spring session

做如下三件事即可:

  • 引入spring session的依赖

    		<dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
            </dependency>
    
  • 配置文件指定存储中间件是redis

    spring.session.store-type=redis
    
  • 启动类增加注解启用Spring Session
    在启动类上添加注解@EnableRedisHttpSession

注意,这里使用session是比较隐蔽的方式,在index.html模板中,有如下Thymleaf的表达式。

在这里插入图片描述

<a th:if="${session.loginUser != null}" >欢迎, [[${session.loginUser.nickname}]]</a>

session.loginUser.nickname,Thymleaf在编译模板时就会使用SpringSession的API,到redis获取session数据。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值