文档章节

Spring-Security3中的RememberMe功能的引入 RememberMe的功

于忠达
 于忠达
发布于 2014/06/12 18:20
字数 823
阅读 110
收藏 0

Spring-Security3中的RememberMe功能的引入

 

RememberMe的功能实现有三种,这里只讲TokenBasedRememberMeServices的实现方案配置。

 

1. Authentication-Manager配置中加上erase-credentials="false"这个属性配置。

不过阅读源码的时候发现如果没有也不要紧,只是会去读数据库,重新获得用户的密码而已。但从整个过程来看,好像也没并没有多读一次数据库。这部分代码的理顺就不包含在这里了。只要知道一点就好:这个配置不是必要的。

    <authentication-manager erase-credentials="false"

 

2. http中加上remember-me的配置

这个配置在logoutanonymous之前即可。

里面有几个属性配置:

user-service-ref指向authentication-manager里面provider当中配置的user-service-ref即可。用来获取用户的时候用。

token-validity-seconds:这个不用解释了吧,就是记住用户多长时间。我不知道怎样可以实现动态的记住,比如用户可选一天/一周/一月/一年等。单位是秒。

authentication-success-handler-ref:这个是认证通过之后的后续处理。如果不需要,这个可以不配置。我是需要的。

       <sec:remember-me

              user-service-ref="userService"

              token-validity-seconds="2592000"

              authentication-success-handler-ref="loginSuccessHandler"/>

 

3. 前端页面

前端页面的登录表单里面增加一个记住我的复选框即可。字段的值可以是true/on/1等多种表达确定使用该功能的方式。

<input name="_spring_security_remember_me" type="checkbox" value="true"/>

 

OK了。这样的配置已经完美的引入了RememberMe功能了。不过由于这个方案使用的是内存存储方式,TokenBasedRememberMeServices把已经登录的人员信息放在内存里,因此关机之后就不能用了。如果要使用持久化到数据库,需要另行配置,方式也差不多。

 

另外的实现方案包括配置data-source-reftoken-repository-ref两种,分别使用JdbcTokenRepositoryImplPersistentTokenBasedRememberServices来实现,并且这两个不能同时配置,都不用的话就用TokenBasedRememberMeServices来进行配置。这两种实现方案暂时没有研究。

 

---------------------------------------------

 

如果采用自己定义httpentry-point的话,即实现了自己的登录方式,比如添加了验证码的校验,这时候加入RememberMe的配置稍微有点不一样。

1. Authentication-Manager配置中加上erase-credentials="false"这个属性配置。

这个配置和前面的一样,可以不配置,照样工作很好。我也是参照别人的配置进行的,后来自己读源码发现不需要这个配置。

2. http中加上remember-me的配置

这个配置基本上不变,但需要添加一个属性,开放出所配置的RememberMeServices来。因为开放的这个Bean要被配置在别的地方

    <sec:remember-me

       services-alias="tokenBasedRememberMeServices"

       user-service-ref="userService"

       token-validity-seconds="2592000"

       authentication-success-handler-ref="loginSuccessHandler"/>

 

3. 自定义登录的AuthenticationProcessingFilter中添加对RememberMeServices的引用

对我来说,这个地方的代码应该是这个样子的:

    <bean id="captchaAuthenticationFilter"

       class="com.xx.CaptchaUsernamePasswordAuthenticationFilter">

       <property name="authenticationFailureHandler"

            ref="loginFailureHandler" />

       <property name="authenticationSuccessHandler"

            ref="loginSuccessHandler" />

       <property name="authenticationManager"

            ref="authenticationManager" />

       <property name="rememberMeServices"

            ref="tokenBasedRememberMeServices" />

       <property name="filterProcessesUrl"

            value="/workspace/dologin" />

       <property name="authCode" ref="authCode" />

    </bean>

 

4. 前端页面

前端页面跟前面是一样的。

 

OK了,就这样。


© 著作权归作者所有

共有 人打赏支持
于忠达
粉丝 113
博文 13
码字总数 16484
作品 0
青岛
程序员
《Spring Security3》第三章第四部分翻译(修改密码)

实现修改密码管理 现在我们将要对基于内存的UserDetailsService进行简单的扩展以使其支持用户修改密码。因为这个功能对用户名和密码存于数据库的场景更有用,所以基于o.s.s.core.userdetail...

小样
2012/03/07
0
0
一步一步教你用shiro——1引入shiro框架

一步一步教你用shiro——1引入shiro框架 一步一步教你用shiro——2配置并自定义realm 一步一步教你用shiro——3配置并自定义sessionManager 一步一步教你用shiro——4配置并自定义sessionDa...

肥肥小浣熊
04/30
0
0
第十三章 RememberMe——《跟我学Shiro》

目录贴: 跟我学Shiro目录贴 Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下...

Zero零_度
2016/03/21
33
0
Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)

问题 shiro中提供了rememberMe功能,它用起来是这样的 [java] view plaincopy UsernamePasswordToken token = new UsernamePasswordToken(loginForm.getUsername(),loginForm.getPassword())......

Jerry-
2015/05/27
0
2
《Spring Security3》第三章第一部分翻译

第三章 增强用户体验 在本章中,我们将对JBCP Pets在线商店增加一些功能,这些新功能能够为用户提供更愉悦和可用的用户体验,同时提供一些对安全系统很重要的功能。 在本章中,我们将要: 按...

heroShane
2014/02/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Win10内部更新:警告用户别用chrome和Firefox

简评:别和 Chrome 和 Firefox 约行不,我 Edge 明明更美、屁股更翘、更性感。。。 微软正在测试 Windows 10 的一个更新:警告用户不要安装 Chrome 和 Firefox。是测试人员发现的这个新警告,...

极光推送
30分钟前
2
0
Java并发编程高阶技术 高性能并发框架源码解析与实战

全网唯一深度解析并发编程框架disruptor底层源码课程,助你成为并发编程高手,拿下高薪 网盘地址下载

qq__2304636824
今天
1
0
day92-20180918-英语流利阅读-待学习

健身最大的敌人不是懒惰,而是逞强 Daniel 2018-09-19 1.今日导读 还记得 2008 年北京奥运会运动员刘翔的退赛风波吗?那天几乎所有中国人都将视线聚焦在了鸟巢体育馆 110 米栏的项目上,迫不...

飞鱼说编程
今天
8
0
70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
3
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部