博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringSecurity3.X的remember-me
阅读量:6162 次
发布时间:2019-06-21

本文共 1209 字,大约阅读时间需要 4 分钟。

  hot3.png

在SpringSecurity中配置remember-me时,遇到这样的问题,remember-me没有起作用,按照官方文档的讲解,只需要在<http>中增加<remember-me />配置,并在login.jsp中增加如下代码即可:

简要说明一下SpringSecurity的登录过程:

UsernamePasswordAuthenticationFilter :获得用户提交的用户名和密码信息  -->UserDetailsService :由其封装用户对象  -->AbstractUserDetailsAuthenticationProvider :转由其进行密码和权限验证,验证通过后封装一个Authentication  -->ProviderManager:会将Authentication封装到SecurityContext中(默认情况下,ProviderManager会在认证成功后清除掉Authentication的密码信息,但会保留用户名称)  -->AbstractRememberMeServices :判断请求参数中是否包含_spring_security_remember_me参数,如果包含并且值为(true,on,yes,1)中的任意一个,则将用户名和密码信息保存进cookie,否则不做处理  -->AccessDecisionManager :由其决定是否放行    之后在请求被保护的资源时,RememberMeAuthenticationFilter会先判断是否Authentication已经失效,如果失效,则试图从cookie中寻找,找到则重新封装Authentication。

问题就出在ProviderManager中,其布尔属性eraseCredentialsAfterAuthentication默认值为true,如果为true则会在username和password验证成功后清除掉Authentication中的password信息,而AbstractRememberMeServices 保存cookie的条件则需要从Authentication中同时取得username和password,这就导致默认情况下AbstractRememberMeServices永远不会将username和password存储到cookie中,所以,为了保证username和password可以被正确的存储到cookie中,我们需要修改eraseCredentialsAfterAuthentication的值为false,好在修改这个属性很方便,如下:

转载于:https://my.oschina.net/fir01/blog/68926

你可能感兴趣的文章
动态修改tabs选项卡和datagrid的某些属性值
查看>>
如何区分广播风暴和网络环路?
查看>>
Linux下自动化监控内存、存储空间!
查看>>
怎么把AI文件导入到PS里面
查看>>
五十、Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL
查看>>
学习六十一
查看>>
delphi ini文件的基础读写。
查看>>
CentOS7中搭建cobbler自动装机服务
查看>>
多线程设计模式:第二篇 - 四种基础模式
查看>>
域名跳转
查看>>
企业网站建设注意事项
查看>>
WPS Office 2019 发布Linux 个人版
查看>>
未来PCB行业互联网+发展趋势
查看>>
PDF如何旋转页面
查看>>
UI设计入门:解析设计标注规范和图标规范
查看>>
php模拟input 的file上传文件
查看>>
配置接口IP地址并通过默认路由配置实现全网互通。
查看>>
怎么在CAD编辑工具中绘制多边形线
查看>>
oracle rownum使用与分页
查看>>
我的友情链接
查看>>