文档章节

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

于忠达
 于忠达
发布于 2014/06/12 18:20
字数 823
阅读 113
收藏 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了,就这样。


© 著作权归作者所有

共有 人打赏支持
于忠达
粉丝 114
博文 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...

肥肥小浣熊
2018/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
Apache Shiro不能RememberMe

我shiro和spring集成,在浏览器也看不到有RememberMe cookie 配置是

NestleCaau
2014/07/24
520
2

没有更多内容

加载失败,请刷新页面

加载更多

如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
32分钟前
0
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
48分钟前
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
今天
1
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
1
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部