分布式项目整合SpringSecurity实现session共享

session 共享流程图分布式项目整合SpringSecurity实现session共享_第1张图片

创建工程

分布式项目整合SpringSecurity实现session共享_第2张图片

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

控制层

@RestController
public class HelloController {
    @Value("${server.port}")
    Integer port;
    @GetMapping("/set")
    public String set(HttpSession session) {
        session.setAttribute("user", "javaboy");
        return String.valueOf(port);
    }
    @GetMapping("/get")
    public String get(HttpSession session) {
        return session.getAttribute("user") + ":" + port;
    }
}

application.proerties

spring.redis.port=6379
spring.redis.host=127.0.0.1

spring.security.user.name=javaboy
spring.security.user.password=123

server.port=8082

配置一下 Redis 的基本信息;Spring Security 为了简化,我就将用户名密码直接配置在 application.properties 中了,最后再配置一下项目端口号。

用idea复制该项目并运行

分布式项目整合SpringSecurity实现session共享_第3张图片
分布式项目整合SpringSecurity实现session共享_第4张图片

然后先访问 localhost:8080/set 向 8080 这个服务的 Session 中保存一个变量,第一次访问时会自动跳转到登录页面,输入用户名密码进行登录即可。访问成功后,数据就已经自动同步到 Redis 中 了

分布式项目整合SpringSecurity实现session共享_第5张图片

然后,再调用 localhost:8081/get 接口,就可以获取到 8080 服务的 session 中的数据:

然后,再调用 localhost:8081/get 接口,就可以获取到 8080 服务的 session 中的数据:

此时关于 session 共享的配置就已经全部完成了,session 共享的效果我们已经看到了。
Security 配置

Session 共享已经实现了,但是我们发现新的问题,在Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?一文中我们配置的 session 并发管理失效了。 详情 请看 https://blog.csdn.net/java3456/article/details/106790242/

你可能感兴趣的:(springsecurity,session共享,spring,boot,java)