`
cosmo2097
  • 浏览: 20382 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Spring Security 2 使用笔记

阅读更多

最近在项目中用到了Spring Security 2

为了实现自己的一些逻辑,所以粗略的读了一次他的代码,和文档。

文档中介绍了Spring Security 的大体框架和原理。

但是对于如何扩展Spring Security,使它更适合自己的项目并没有详细的介绍,这点比较遗憾。

所以硬着头皮,大致过了一次他的代码。

 

以下是我扩展的需求:

1、用户登录是判断用户登录错误次数是否超过指定次数,如三次,若超过则锁定用户

2、登录成功更新用户的信息,如最后登录时间,登录IP等,并保存到数据库。

3、登录失败则增加用户登录失败的次数。

 

对于上面的这些需求,读了源代码之后,你会发现Spring Security的框架十分灵活。

代码也很清晰。

 

首先,用户登录时,经过了一系列的过滤器,他的过滤器使用Spring来管理的。

其中一个名为AuthenticationProcessFilter的过滤器,专门为网页验证提供。

跟了一下这个过滤器,发现他继承的抽象类AbstractProcessingFilter中有几个可以扩展的方法:

    protected void onPreAuthentication(HttpServletRequest request,HttpServletResponse response) throws AuthenticationException, IOException {
    }

    protected void onSuccessfulAuthentication(HttpServletRequest request,HttpServletResponse response,Authentication authResult) throws IOException {
   }

    protected void onUnsuccessfulAuthentication(HttpServletRequest request,HttpServletResponse response,
           AuthenticationException failed) throws IOException {
   }
 

看方法名大家应该能想到他的用处,就是在验证前,验证成功后,验证失败后,提供扩展的逻辑操作。

所以我们可以通过继承AuthenticationProcessFilter并重写这几个方法来增加自己的逻辑。

 

重新实现了过滤器之后要重新设置Spring Security 2的过滤器链,而且原来的auto-config也不能使用。否则将无效

配置如下:

	<http entry-point-ref="authenticationEntryPoint">


		<intercept-url pattern="/js/*" filters="none" />


		<intercept-url pattern="/styles/*" filters="none" />


		<intercept-url pattern="/images/*" filters="none" />


		<intercept-url pattern="/login" filters="none" />


		<intercept-url pattern="/reg" filters="none" />


		<intercept-url pattern="/" filters="none" />


		<intercept-url pattern="/registerMember" filters="none" />


		<intercept-url pattern="/index.jsp" access="ROLE_USER" /> 


		<intercept-url pattern="/member/*" access="ROLE_USER" />


		<!-- <form-login login-processing-url="/checkMember" login-page="/login" authentication-failure-url="/login?error=true" default-target-url="/" /> -->


		<anonymous />


		<logout logout-url="/logout" logout-success-url="/" />


		<remember-me key="e37f4b31-0c45-11dd-bd0b-0800200c9a66" />


	</http>





       <authentication-manager alias="authenticationManager"/>


	


	<beans:bean class="com.mysport.security.filter.EnhanceAuthenticationProcessFilter">


		<custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />


		<beans:property name="authenticationManager" ref="authenticationManager" />


		<beans:property name="authenticationFailureUrl" value="/login?error=true" />


		<beans:property name="defaultTargetUrl" value="/" />


		<beans:property name="filterProcessesUrl" value="/checkMember" />


		<beans:property name="memberService" ref="memberService" />


	</beans:bean>


	


	<beans:bean id="authenticationEntryPoint" class="org.springframework.security.ui.


                                                                         webapp.AuthenticationProcessingFilterEntryPoint"> 


    	<beans:property name="loginFormUrl" value="/login" /> 


    </beans:bean> 

 

如果使用Remember Me则要以类似的方式实现RememberMeProcessingFilter

1、要去掉http中的

<remember-me key="yourkey" />

2、实现rememberMeService

    <beans:bean id="rememberMeServices" class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices" >
    	<beans:property name="key" value="yourkey" />
    	<beans:property name="userDetailsService" ref="securityManager" />
    </beans:bean>

 3、实现自己的RememberMeProcessingFilter

	<beans:bean class="com.mysport.security.filter.EnhanceRememberMeProcessingFilter">
		<custom-filter position="REMEMBER_ME_FILTER" />
		<beans:property name="authenticationManager" ref="authenticationManager" />
		<beans:property name="rememberMeServices" ref="rememberMeServices" />
		<beans:property name="memberService" ref="memberService" />
	</beans:bean>

 4、最重要的,重新将rememberMeAuthenticationProvider添加到providers中,主要是设置对应的key,否则cookie在解密时无法正确解出内容

    <beans:bean id="rememberMeAuthenticationProvider" class="org.springframework.security.providers.rememberme.RememberMeAuthenticationProvider">
    	<custom-authentication-provider />
    	<beans:property name="key" value="yourkey" />
    </beans:bean>
 

 

分享到:
评论
3 楼 hhww0101 2010-11-11  
2010-11-11 11:00:21,320 DEBUG SessionImpl:220 - opened session at timestamp: 5281564349726720
2010-11-11 11:00:21,320 DEBUG JDBCTransaction:54 - begin
2010-11-11 11:00:21,320 DEBUG ConnectionManager:421 - opening JDBC connection
2010-11-11 11:00:21,320 DEBUG JDBCTransaction:59 - current autocommit status: false
2010-11-11 11:00:21,320 DEBUG AbstractBatcher:366 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
2010-11-11 11:00:21,320 DEBUG SQL:401 - select this_.id as id15_0_, this_.create_time as create2_15_0_, this_.cryptpassword as cryptpas3_15_0_, this_.emailaddress as emailadd4_15_0_, this_.enabled as enabled15_0_, this_.fullname as fullname15_0_, this_.loginname as loginname15_0_, this_.update_time as update8_15_0_ from userbase this_ where this_.loginname=?
2010-11-11 11:00:21,320 DEBUG AbstractBatcher:382 - about to open ResultSet (open ResultSets: 0, globally: 0)
2010-11-11 11:00:21,320 DEBUG AbstractBatcher:389 - about to close ResultSet (open ResultSets: 1, globally: 1)
2010-11-11 11:00:21,320 DEBUG AbstractBatcher:374 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2010-11-11 11:00:21,320 DEBUG StatefulPersistenceContext:837 - initializing non-lazy collections
2010-11-11 11:00:21,320 DEBUG JDBCTransaction:152 - rollback
2010-11-11 11:00:21,320 DEBUG JDBCTransaction:163 - rolled back JDBC Connection
2010-11-11 11:00:21,320 DEBUG ConnectionManager:302 - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
2010-11-11 11:00:21,320 DEBUG ConnectionManager:441 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
2010-11-11 11:00:21,320 DEBUG ConnectionManager:302 - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!


我整合了quartz定时调度任务,结果输入错误的用户名或密码,后台日志感觉不正常啊。
前台页面也不懂,在ff下看到 Failed to load source for: http://localhost:8080/micrite/j_spring_security_check 加载源代码失败!
2 楼 zhanglei_btest 2009-09-10  
楼主 把自己的代码贴一下 供我们看一下
1 楼 alymail 2009-08-05  
我恰好也有这样的需求,但是试着配置了一下,发现页面都显示不出来,用iehttpheader,查看发现页面一直在重定向,楼主知道什么原因吗?

相关推荐

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    SpringSecurity笔记,编程不良人笔记

    在本笔记中,我们将深入探讨SpringSecurity的核心概念、配置以及如何与SpringBoot结合使用。 1. **SpringSecurity核心概念** - **Filter Chain**: SpringSecurity通过一系列过滤器实现其安全功能,这些过滤器构成...

    Spring Security OAuth2.0学习笔记.zip

    Spring Security OAuth2.0学习笔记 什么是认证、授权、会话。 Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring ...

    Spring Security 资料合集

    这三份资料——"实战Spring Security 3.x.pdf"、"Spring Security 3.pdf" 和 "Spring Security使用手册.pdf" 将深入探讨这些概念,并提供实践指导,帮助读者掌握如何在实际项目中应用Spring Security。通过学习这些...

    spring security3笔记

    《Spring Security 3笔记》 在深入探讨Spring Security 3的知识点之前,我们先了解下这个框架的基本概念。Spring Security是Spring生态系统中的一个组件,它为Java应用提供了全面的安全服务,包括认证、授权以及Web...

    Spring Security笔记.rar

    本笔记将深入探讨Spring Security的核心概念、配置以及如何在实际项目中应用。 一、Spring Security核心概念 1. **身份验证(Authentication)**:这是验证用户身份的过程。Spring Security提供了多种方式来实现,...

    SpringSecurity笔记2-SpringSecurity命名空间

    在本笔记中,我们将深入探讨Spring Security的命名空间,这是配置该框架的关键部分。通过理解这些命名空间,开发者可以更有效地控制应用程序的安全策略。 首先,Spring Security的核心配置是通过XML命名空间完成的...

    最详细Spring Security学习资料(源码)

    Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...

    Spring Security tutorial 学习笔记(一)

    在 `SpringSecurityTest01` 这个压缩包文件中,你可能找到了一个示例项目,它可能包含了配置类、控制器、视图和测试用例。通过分析这些代码,你可以更深入地理解如何在实际项目中应用 Spring Security。 总之,...

    狂神Spring Security静态资源

    4. **使用HTTP基本认证或OAuth2**:Spring Security支持多种认证方式,包括HTTP基本认证、OAuth2等。静态资源可能需要某种形式的认证才能访问,你可以根据项目需求选择合适的认证机制。 5. **启用CSRF防护**:虽然...

    Spring Security 笔记思维导图

    Spring Boot 整合 Spring Security 包含认证,授权,加密,验证码,前后端分离,记住密码,自定义组件等

    视频配套笔记_Spring Security OAuth2.0认证授权_v1.1.rar

    Spring Security OAuth2.0 是一个广泛使用的Java安全框架,它为构建安全的Web应用程序提供了强大的支持。OAuth2.0是授权框架的一个标准,允许第三方应用在用户授权的情况下访问其私有资源,而无需共享用户的登录凭证...

    springsecurity3 学习笔记源码分析所得

    Spring Security 是一个强大的Java安全框架,用于...总的来说,Spring Security 3的学习笔记和源码分析对提升安全开发技能大有裨益,不仅可以加深理论理解,还能在实际项目中灵活运用,构建更加健壮、安全的应用系统。

    Spring学习笔记+学习源码.zip

    2. **容器(IoC Container)**:Spring容器负责创建对象、管理对象的生命周期以及维护对象间的依赖关系。主要有两种类型的容器:BeanFactory和ApplicationContext。 3. **面向切面编程(Aspect-Oriented ...

    spring security学习笔记

    spring security学习笔记

    springSecurityTest.zip

    这个"springSecurityTest.zip"文件是一个IDEA(IntelliJ IDEA)与MAVEN项目,设计用于帮助初学者理解并入门Spring Security。下面将详细阐述Spring Security的主要概念和其在实际开发中的应用。 首先,Spring ...

    springboot+springsecurity入门

    在这个"springboot+springsecurity入门"项目中,我们将关注如何将这两个框架结合使用,实现一个自定义表单登录的功能。自定义表单登录意味着我们可以根据应用需求设计登录界面,并且处理用户提交的登录信息。 1. ...

Global site tag (gtag.js) - Google Analytics