`

spring security 3.0x remember-me 免登陆

阅读更多


 

    很多网站登陆的时候都会提供“记住我”或者“记住我&&周”的选项,spring security 3也提供了此功能,本人写了两个demo,一个是基于cookie来实现免登陆,一个是基于数据库的:

   1 基于cookie的remember-me

    spring security的配置如下:

 

<b:beans xmlns="http://www.springframework.org/schema/security"
 xmlns:b="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/security 
    http://www.springframework.org/schema/security/spring-security-3.0.xsd">


	<http auto-config="false" access-denied-page="/accessDenied.jsp">
	  <!-- 不要过滤图片等静态资源,其中**代表可以跨越目录,*不可以跨越目录。
	  <intercept-url pattern="/**/*.jpg" filters="none" />
	  <intercept-url pattern="/**/*.png" filters="none" />
	  <intercept-url pattern="/**/*.gif" filters="none" />
	  <intercept-url pattern="/**/*.css" filters="none" />
	  <intercept-url pattern="/**/*.js" filters="none" /> -->
	  <!-- 登录页面和忘记密码页面不过滤 -->
	  <intercept-url pattern="/login.jsp" filters="none" />
	  <intercept-url pattern="/jsp/forgotpassword.jsp"   filters="none" />
	  <!-- ROLE_ENTER_ORDINARY_PAGE, -->
	  <intercept-url pattern="/index.jsp"   access="ROLE_ENTER_ORDINARY_PAGE, ROLE_ENTER_HIGH_LEVEL_PAGE" /> 
	
	  
	  <!-- 检测失效的sessionId,超时时定位到另外一个URL, 防止固化session攻击 -->
	  <session-management invalid-session-url="/timeout.jsp" session-fixation-protection="migrateSession">
	  	<concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/>
	  </session-management>
	  
	  <form-login login-page="/login.jsp" authentication-failure-url="/loginError.jsp"   default-target-url="/index.jsp"/>
	  <logout invalidate-session="true" logout-success-url="/login.jsp"/>
	  <http-basic/>
	  <!-- 使用cookie来记录登陆 -->
	  <remember-me user-service-ref="userService" use-secure-cookie="true"/>
	  <anonymous/>
	 </http>

	 <!-- 注意能够为authentication-manager 设置alias别名  -->
	 <authentication-manager alias="authenticationManager">
	      <!-- <authentication-provider user-service-ref="userDetailsManager"> -->
	      <authentication-provider user-service-ref="userService">
      		<password-encoder hash="md5">
      			<salt-source user-property="username"/>
      		</password-encoder>
	           <!-- <password-encoder ref="passwordEncoder"> -->
	                <!-- 用户名做为盐值 -->
	                <!--<salt-source user-property="username" />
	           </password-encoder>-->
	      </authentication-provider>
	 </authentication-manager>
	 
</b:beans>

   2 基于数据库的rember-me

   首先要建一张表记录登陆:

   

create table persistent_logins (username varchar(64) not null, series varchar(64) primary key, token varchar(64) not null, last_used timestamp not null)

   然后spring security的配置与第一种配置不一样的地方在<rember-me>

   

<remember-me user-service-ref="userService" data-source-ref="myDataSource"/>

    此处的myDataSource要在spring的配置文件中配置:

   

  <!-- 数据源 -->
  <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${JDBC.DRIVERNAME}"/>
    <property name="url" value="${JDBC.URL}"/>
    <property name="username" value="${JDBC.USERNAME}"/>
    <property name="password" value="${JDBC.PASSWORD}"/>
  </bean>

 

    测试,jsp登陆代码如下:

   <form action="/spring_security/j_spring_security_check" method="post">  
    Account:<Input name="j_username"/><br/>  
    Password:<input name="j_password" type="password"/><br/>  
    <input type='checkbox' name='_spring_security_remember_me'/>记住我<br/>
    <input value="submit" type="submit"/>  <br/>
    
   </form> 

 

    验证是否记住用户的页面为index.jsp,页面代码为:

 

  <body>
  	<form action="">
  		<sec:authorize ifAllGranted="ROLE_ENTER_ORDINARY_PAGE" >
			<input type="button" value="普通用户点击 "/><br/>
	    </sec:authorize>
	    <sec:authorize ifAllGranted="ROLE_ENTER_HIGH_LEVEL_PAGE">
			<input type="button" value="高级用户点击 "/><br/>
	    </sec:authorize>
	    用户名称:<sec:authentication property="principal.username"></sec:authentication><br/>
	    <a href="<%= request.getContextPath() %>/j_spring_security_logout">
	    	<input type="button" value="退出"/>
    	</a>
  	</form>
	    
  </body>

    如果用户登陆就会显示登陆用户的名称,

 

 

 

   使用第一种配置登陆后,可以在浏览器中查看cookie,

  

 此时关掉浏览器,重新打开浏览器访问http://localhost:8080/spring_security/index.jsp,页面显示为:

 

 

 

 

 

  使用第二种配置登陆后,数据库中的数据,



 


此时关掉浏览器,重新打开浏览器访问http://localhost:8080/spring_security/index.jsp

页面显示为:

 


 
 

 

 

 

 

 

  • 大小: 11.2 KB
  • 大小: 6.7 KB
  • 大小: 42.6 KB
  • spring_security.zip (50.2 KB)
  • 描述: 基于用户,角色,权限的spring_security完整项目
  • 下载次数: 47
分享到:
评论

相关推荐

    spring security3.0所有最新开发包及源码及文档

    在Spring Security 3.0版本中,这个框架进行了大量的改进和增强,以适应不断变化的安全需求。 Spring Security的核心概念包括: 1. **过滤器链**:这是Spring Security的主要执行机制,它通过一系列自定义的过滤器...

    spring security3.0 demo

    5. **Remember Me**:Spring Security还提供了记住我(Remember-Me)服务,使用户在关闭浏览器后仍然可以在一段时间内保持登录状态。 6. **表达式式访问控制(Expression-Based Access Control, EBAC)**:通过使用...

    SpringSecurity3.0 Demo

    在本项目"SpringSecurity3.0 Demo"中,我们将深入探讨SpringSecurity 3.0版本的功能和用法。 首先,SpringSecurity的核心功能包括用户认证(Authentication)和权限授权(Authorization)。在3.0版本中,它引入了更...

    spring3.0+spring security3.1.4 api chm 中文版

    《Spring 3.0 + Spring Security 3.1.4 API 中文版》是一份集成了Spring框架3.0和Spring Security 3.1.4的中文帮助文档,旨在为开发者提供详尽的API参考和指导。这两个核心组件在企业级Java应用开发中扮演着至关重要...

    spring security3.0 spring权限问题

    ### Spring Security 3.0权限问题相关知识点 #### 一、Spring Security简介 **1.1 Spring Security 是什么?** Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架。它为Java应用提供了声明式的...

    Spring Security 3.0 安全权限管理手册

    - **实现免登录验证 (Remember-Me 验证)**:允许用户在一定时间内无需重复登录。 - **提供一系列标签库进行页面元素的安全控制**:如`&lt;sec:authorize&gt;`、`&lt;sec:authentication&gt;`等标签,可以轻松控制页面元素的显示...

    Spring-Security2.0 和 3.0中文文档

    在这两个版本中,Spring Security 提供了Remember Me服务,允许用户在登录后的一段时间内无需再次输入凭证。这提高了用户体验,但同时也需要谨慎处理,防止安全漏洞。 4. **Filter Chain**: Spring Security ...

    spring-security-3.0 GA

    《Spring Security 3.0 GA 入门与深入解析》 Spring Security 是一款强大的安全框架,广泛应用于Java Web 应用程序的安全管理。在3.0 GA版本中,该框架进一步提升了性能,优化了API,并增加了许多新特性,使得安全...

    SpringSecurity_3.0

    《SpringSecurity_3.0》是一本面向Java Web开发初学者和中级程序员的教程,它深入浅出地介绍了Spring Security这一强大的安全框架。Spring Security是一个为Java应用提供身份验证和授权服务的开源项目,它旨在保护...

    spring security3 中文版本

    Spring Security 3.0.1 是在 Spring Security 3.0 的基础上进行的一次 bug 修复版本,主要针对先前版本中存在的问题进行了修正。此次版本未引入新的功能,但修正了一些已知的问题,增强了稳定性。 ##### 1.4 获取 ...

    Spring Security-3.0.1中文官方文档(翻译版)

    - **A.2 持久登陆(Remember-Me)表** 用于存储“记住我”的信息。 **B. 安全命名空间** - **B.1 Web 应用安全- &lt;http&gt; 元素** 用于配置 web 应用的安全策略。 - **B.2 认证服务** - **B.2.1 &lt;authentication-...

    spring-security文档和jar包

    《spring-security3.0.rar》是一个包含Spring Security 3.0版本库的压缩文件,用户可以将其解压到项目的lib目录下,以便在项目中引用。3.0版本虽然较旧,但仍能提供基本的安全功能,如HTTP安全、基于角色的访问控制...

    spring-security 官方文档 中文版

    本文档所指的版本为 Spring Security 3.0.1,这是一个 bug fix 版本,主要针对 3.0 版本中存在的问题进行修复,确保开发者能够获取更稳定可靠的 Spring Security 库。 **1.4 获取 Spring Security** - **项目模块*...

    springsecurity3.0.5

    springsecurity3.0.5简单例子 当用firefox访问时产生的临时cookie,在下次访问中还存在的话,获取的session还是原来的session(user验证信息不变),如果把那个临时cookie删除的话,则springsecuriyt生成新的session...

    Spring_Security-3.0.1_中文自学教程.pdf

    Spring Security 3.0.1 是基于 Spring Security 3.0 的一个 bug fix 版本,主要修复了 3.0 中已知的问题,并对文档中的一些拼写错误进行了修正。 ##### 1.4 如何获取 Spring Security - **项目模块**:Spring ...

    spring security3.1.3 和 spring security3.0.0

    1. **Remember Me服务增强**:提供了更多的选项来管理“记住我”功能,增强了安全性,如使用更安全的令牌存储方式。 2. **XML配置简化**:通过使用更简洁的命名空间和元素,使得Spring Security的XML配置更加清晰易...

    Spring Security 3.x 官网文档 chm格式 (中文版)

    《Spring Security 3.x 官方文档》是Java开发者学习Spring Security框架的重要参考资料,它以中文版的形式提供了全面且深入的指南。这份文档主要涵盖了Spring Security的核心概念、配置和使用方法,旨在帮助开发者...

Global site tag (gtag.js) - Google Analytics