文档章节

Spring Seucrity 之 Remember Me

华哥_
 华哥_
发布于 2013/08/08 13:35
字数 574
阅读 95
收藏 0

Spring Security 提供了Remember-me机制用来实现记录用户的登录状态。方便用户下

次自动登录。Spring Security 对此操作提供了必要的钩子,remember-me有两个固定的实现

一个是使用把用户登录信息加密以cookie的方式保存到客户端。一是用户可以把用户信息

持久化到服务端的数据库中。

   注意:这两种实现都必须有一个 UserDetailsService实现。如果你使用一个没有使用

UserDetailsService的验证提供者,Remember-me将不会工作,除非你在应用的上下文中

有一个UserDetailsService对象。

一、基本的Hash保存到客户端的Cookie中。

     直接在命名空间<http>中加入<remember-me />元素,就可以使用本方法。但要注意的

是在你的。此时系统会自动为你生成UserDetailsService对象(如果你在配置文件中定义了此

对象必须在<remember-me />使用user-service-ref指定)。本策略使用的为

[java]  view plain copy
  1. org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices  

此策略会在客户端生成一个名称为SPRING_SECURITY_REMEMBER_ME_COOKIE,值进

行加密后的Cookie

二、持久化到服务器端的服务器中

     如果想使用本策略,你需要在命名空间的配置中提供一个datasource引用:

 

[html]  view plain copy
  1. <http>  
  2.     ....  
  3.    <remember-me data-source-ref="someDataSource" />  
  4.  </http>  

数据库中还必须包含一个名为persistent_logins的表,表结构使用一下SQL语句创建(或者是等价的)

  
[sql]  view plain copy
  1. create table persistent_logins (  
  2.   username varchar(64) not null,  
  3.   series varchar(64) primary key,  
  4.   token varchar(64) not null,  
  5.   last_used timestamp not null)  


   由于以上两种策略对应的实现类都的父类(org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices)实现了LogoutHandler接口。

   在AbstractRememberMeServices类中的 logout(...)方法中清楚了Cookie。如下所示:

         

[java]  view plain copy
  1. public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {  
  2.         if (logger.isDebugEnabled()) {  
  3.             logger.debug( "Logout of user "  
  4.                     + (authentication == null ? "Unknown" : authentication.getName()));  
  5.         }  
  6.         cancelCookie(request, response);  
  7.     }  
 ...
[java]  view plain copy
  1. /** 
  2.      * Sets a "cancel cookie" (with maxAge = 0) on the response to disable persistent logins. 
  3.      * 
  4.      * @param request 
  5.      * @param response 
  6.      */  
  7.     protected void cancelCookie(HttpServletRequest request, HttpServletResponse response) {  
  8.         logger.debug("Cancelling cookie");  
  9.         Cookie cookie = new Cookie(cookieName, null);  
  10.         cookie.setMaxAge(0);  
  11.         cookie.setPath(getCookiePath(request));  
  12.   
  13.         response.addCookie(cookie);  
  14.     }  

......

如果想在用户安全退出后不删除Cookie, 可以自己实现类,实现类可以继承org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices 或

 org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices。在自定义类中只重写org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices

类中的logout(...)方法即可。(但是这样 就失去了安全退出的意义了。哈哈)

本文转载自:http://blog.csdn.net/small_love/article/details/6641316

共有 人打赏支持
下一篇: 无题
华哥_
粉丝 4
博文 122
码字总数 67861
作品 0
虹口
私信 提问
Spring Security——session管理

Spring Security通过http元素下的子元素session-management提供了对Http Session管理的支持。 1.1 检测session超时 Spring Security可以在用户使用已经超时的sessionId进行请求时将用户引导到...

引鸩怼孑
2015/05/05
0
0
Spring Security 退出

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...

李玉长
05/05
0
0
SpringSecurity3.X--remember-me

http://blog.sina.com.cn/s/blog_8020e411010155lf.html SpringSecurity3.X--remember-me (2012-04-20 15:03:14) 转载▼ 标签: it 分类: javaEE 在SpringSecurity中配置remember-me时,遇到......

nibilly
2015/11/03
0
0
利用Spring Security 3.2的remember-me搭建SSO

回顾 在上一篇文章,我实现了Spring Security3.2搭建的第一个网站应用firstWeb. 进阶-使用Spring Security3.2搭建LDAP认证授权和Remember-me。 而在更早的时候,我有使用Apache+tomcat搭建c...

xpbug
2014/02/26
0
0
spring security2.X 添加验证码

ps:这个是spring security 2.x适用! 如何搭建struts2+hibernate+spring+spring security ,可以看我以前写的一篇文章:http://my.oschina.net/BeyondBit/blog/64465 今天我们来介绍一下sprin...

Beyond-Bit
2013/02/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(7.6)shell脚本定时采集日志数据到hdfs

上一篇博客博主分享了hadoop内置rpc的使用案例,本节博主将为小伙伴们分享一个在实际生产中使用的日志搜集案例。前面的文章我们有讲到过用户点击流日志分析的流程,本节就是要完成这个分析流...

em_aaron
9分钟前
0
0
wave和pcm互转

wav->pcm pcm->wav c#代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using Sys......

whoisliang
11分钟前
0
0
Win10:默认的图片打开应用,打开图片时速度明显很慢的解决办法

首先,我们随便地打开一张图片。然后,点击右上角的三个小点,最后点击弹出菜单最下面的“设置”。如下图: 在“设置”中找到下面的“人物”,把它关掉就好了。 原来,默认情况下,Win 10的图...

LivingInFHL
今天
3
0
js代码激发onchange事件,兼容谷歌火狐IE

var el = document.getElementsByName('role')[0]; el.value = '3'; var evt = document.createEvent("HTMLEvents"); evt.initEvent("change", false, true); el.dispatchEvent(evt);......

我退而结网
今天
4
0
mysql客户端报错:libmysqlclient_16 not defined in file libmysqlclient.so.16

报错情况: 安装完mydumper之后(上一篇文章),登陆Mysql客户端报错:version libmysqlclient_16 not defined in file libmysqlclient.so.16 with link time reference 同样:mysql的其他客...

machogyb
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部