官方文档

https://docs.spring.io/spring-session/docs/2.4.2/reference/html5/#spring-security

Maven

主要

        <!--Spring Security--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!--Spring Data Redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--Spring Session--><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-core</artifactId></dependency><!--Spring Data Redis Session--><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency>

解决方案

集成Spring Session

Maven

        <!--Spring Session--><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-core</artifactId></dependency>

配置

/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-02-16 20:27*/
@Configuration
@EnableSpringHttpSession
public class CustomSpringHttpSessionConfig {@Beanpublic MapSessionRepository sessionRepository() {return new MapSessionRepository(new ConcurrentHashMap<>());}}

集成Spring Session Redis

Maven

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

配置

取消Spring Session配置

/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-02-16 20:27*/
//@Configuration
//@EnableSpringHttpSession
public class CustomSpringHttpSessionConfig {@Beanpublic MapSessionRepository sessionRepository() {return new MapSessionRepository(new ConcurrentHashMap<>());}}

Redis Session配置

@Configuration
public class SecurityConfiguration<S extends Session> extends WebSecurityConfigurerAdapter {@Autowiredprivate FindByIndexNameSessionRepository<S> sessionRepository;@Overrideprotected void configure(HttpSecurity http) throws Exception {// @formatter:offhttp// other config goes here....sessionManagement((sessionManagement) -> sessionManagement.maximumSessions(2).sessionRegistry(sessionRegistry()));// @formatter:on}@Beanpublic SpringSessionBackedSessionRegistry<S> sessionRegistry() {return new SpringSessionBackedSessionRegistry<>(this.sessionRepository);}}

Session Listener

/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-02-25 10:45*/
@Configuration
@EnableRedisHttpSession
public class CustomRedisHttpSessionConfig {/*** httpSession的会话监听,*/@Beanpublic HttpSessionEventPublisher httpSessionEventPublisher() {return new HttpSessionEventPublisher();}
}

JSON序列化

Jackson2

Redis配置

/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-03-16 23:12*/
@Configuration
public class CustomRedisConfig {// private ObjectMapper objectMapper = new ObjectMapper();@Autowiredprivate ObjectMapper objectMapper; //需要另外配置,不是重点,自行配置/*** @see org.springframework.security.jackson2.SecurityJackson2Modules* @return Redis序列化器*/@Beanpublic RedisSerializer<Object> redisSerializer(){ObjectMapper om = objectMapper.copy();//om.registerModules(SecurityJackson2Modules.getModules(getClass().getClassLoader()));//om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);om.registerModule(new CoreJackson2Module());//om.registerModule(new CasJackson2Module());om.registerModule(new WebJackson2Module());om.registerModule(new WebServletJackson2Module());om.registerModule(new WebServerJackson2Module());om.registerModule(new OAuth2ClientJackson2Module());SecurityJackson2Modules.enableDefaultTyping(om);return new GenericJackson2JsonRedisSerializer(om);}@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);redisTemplate.setDefaultSerializer(redisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;}
}

Redis Session配置

/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-02-25 10:45*/
@Configuration
@EnableRedisHttpSession
public class CustomRedisHttpSessionConfig {private final RedisSerializer<Object> redisSerializer;public CustomRedisHttpSessionConfig(RedisSerializer<Object> redisSerializer) {this.redisSerializer = redisSerializer;}/*** Spring Session Redis JSON序列化* *注:bean的名称必须为springSessionDefaultRedisSerializer** @see org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration*/@Beanpublic RedisSerializer<Object> springSessionDefaultRedisSerializer(){return redisSerializer;}/*** httpSession的会话监听,*/@Beanpublic HttpSessionEventPublisher httpSessionEventPublisher() {return new HttpSessionEventPublisher();}
}

Fastjson

同理,参考:Spring Session Redis最佳实践(3)使用Fastjson替换JDK序列化存储

常见问题

Spring Boot——Spring Session Redis整合Spring Security时错误【RedisConnectionFactory is required】解决方案

Spring Security + Spring Session + Redis——【SecurityContext】和【AuthenticationToken】JSON反序列化问题解决方案

Spring Security + Redis Session——JSON序列化错误[The class xxx and name of xxx is not whitelisted. ]解决方案

参考文章

Spring Session & RedisでJacksonを使ったシリアライズを試してみる

Spring Session + Redis——自定义JSON序列化解决方案

Spring Security——集成Spring Session、Redis和JSON序列化解决方案相关推荐

  1. Spring Session Redis——自定义JSON序列化解决方案

    问题描述 Spring Session + Redis--自定义JSON序列化解决方案 问题分析 RedisHttpSessionConfiguration中,Bean名称必须是springSessi ...

  2. Spring Boot——Spring Session Redis整合Spring Security时错误【RedisConnectionFactory is required】解决方案

    问题描述 异常栈栈底 Caused by: java.lang.IllegalStateException: RedisConnectionFactory is requiredat org.spri ...

  3. .netcore 如何获取系统中所有session_集群化部署,Spring Security 要如何处理 session 共享?

    前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我 ...

  4. Spring security 集成 JustAuth 实现第三方授权登录

    Spring security 集成 JustAuth 实现第三方授权登录脚手架: 一.特性 spring security 集成 JustAuth 实现第三方授权登录 : 此项目从 用户管理脚手架( ...

  5. Spring Security 集成 Authing CAS 认证(一)

    01 集成介绍 单点登录 (Single Sign On),英文名称缩写 SSO,意思是在多系统的环境中,登录单方系统,就可以无须再次登录,访问相关受信任的系统.也就是说,只要登录一次单体系统即可. ...

  6. 如何用 Spring Security 集成 CAS 认证 (二)

    在上一篇文章< Spring Security 集成 Authing CAS 认证(一)>中,我们讲解了很多的基础知识和概念.同时,认证(一)中也讲述了什么是 CAS 协议.什么是单点登录 ...

  7. Spring MVC实现Spring Security,Spring Stomp websocket Jetty嵌入式运行

    使用Spring框架各个组件实现一个在线聊天网页,当有用户连接WebSocket,服务器监听到用户连接会使用Stomp推送最新用户列表,有用户断开刷新在线列表,实时推送用户聊天信息.引入Jetty服务 ...

  8. spring security logout(spring security登出示例)

    ** spring security logout(spring security登出示例) ** 在学习实现spring security登出的时候发现了一篇外文,感觉写的挺好,这里斗胆尝试翻译出来 ...

  9. PART 5: INTEGRATING SPRING SECURITY WITH SPRING BOOT WEB

    转自:http://justinrodenbostel.com/2014/05/30/part-5-integrating-spring-security-with-spring-boot-web/ ...

最新文章

  1. 3dsmax 让物体变透明
  2. 基于深度卷积神经网络进行人脸识别的原理是什么?
  3. 从未这么明白的设计模式(一):单例模式
  4. python 类特殊方法_python中用特殊方法定制类
  5. 美团酒店Node全栈开发实践
  6. 委派模式与策略模式综合应用
  7. 数据结构之最小生成树
  8. Cloud一分钟 | 阿里云将在英国大区设立数据中心
  9. 2019年应届生平均起薪5610元 一线城市吸引力首次跌破30%
  10. 1091 N-自守数 (15 分)—PAT (Basic Level) Practice (中文)
  11. C语言实现键盘记录器
  12. python将excel生成pdf_高效办公!Python 批量生成PDF文档
  13. python源码剖析_Python源码剖析读后感1000字
  14. 我从不劝退,我就是退。
  15. jquery weui 上拉加载,下拉刷新,问题解答。
  16. 如何删除Word 2010中的“向下箭头”
  17. Linux Wps 缺少字体
  18. 过去式加ed的发音_过去式,过去分词,加ed 后的读法
  19. 面向对象:结构化开发方法和面向对象开发方法
  20. BeatMark X for mac(fcpx音乐卡点神器)

热门文章

  1. 以Post方式发送数据采用WebClient
  2. android 首选项框架,Android:创建自定义首选项
  3. php对应哪个oracle版本,Oracle 版本说明
  4. python判断是否是英文字母_用python如何判断字符串是纯英文
  5. sql语言和php,SQL语言快速入门(三)_php
  6. 求中位数_图解面试题:如何分析中位数?
  7. C语言写一个简单的数学程序,用C语言计算简单的数学式子
  8. 对实体 quot;useSSLquot; 的引用必须以 ';' 分隔符结尾
  9. 二、分布式文件系统HDFS及其简单使用
  10. 七、Go 语言面向对象编程