`
tanbamboo
  • 浏览: 19495 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Custom Spring Security Filter

    博客分类:
  • Java
阅读更多
最近在项目中用Spring Security 2.0.1做权限控制管理,由于以前用过Acegi Security,基本上很快搞定。但是后来在移植自己扩展的AuthenticationProcessingFilter的时候,发现了很多问题。
经过一些网络搜索和测试,问题解决,做个记录:

1. 如果有自定义的Filter用于替换系统默认filter的时候,需要把http的auto-config选项关闭掉,否则会导致与默认filter冲突,Order相同。
2. http配置里面的anonymous、login、logout等,实际上是配置了过滤器链中的默认的AnonymousFilter、authenticationProcessingFilter、logoutFilter等。本例中由于仅扩展authenticationProcessingFilter,所以只需要去掉login配置。
3. login配置还包括了一个authenticationProcessingFilterEntryPoint的概念,所以当替换掉默认的authenticationProcessingFilter之后,需要在http中,通过属性entry-point-ref指向一个authenticationProcessingFilterEntryPoint。

由此可见,其实spring security在架构上还是和acegi一脉相承的,只是spring security在配置方面做了更多的magic处理,优点是:入门容易,配置内容更少;缺点是:增加了magic成分,也增加了查找错误、扩展的难度。
3
0
分享到:
评论
3 楼 tanbamboo 2009-08-05  
<?xml version="1.0" encoding="UTF-8"?>

<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-2.5.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">

    <http realm="Contacts Realm" entry-point-ref="authenticationProcessingFilterEntryPoint">
        <intercept-url pattern="/admin/**/*" access="ROLE_ADMIN" />
       
       	<intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>

        <port-mappings>
            <port-mapping http="8080" https="8443" />
        </port-mappings>
        
        <anonymous/>
        <!--<form-login login-page="/admin/login" authentication-failure-url="/admin/login?error=1"/>-->
        <!--<logout logout-success-url="/admin/login"/>-->
    </http>

    <authentication-manager alias="authenticationManager"/> 
    
    <b:bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
	    <b:property name="loginFormUrl" value="/admin/login" />
    </b:bean>

    <b:bean id="authenticationProcessingFilter" class="com.sample.yours.AuthenticationProcessingFilter">
        <custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
        
        <b:property name="defaultTargetUrl" value="/" />
        <b:property name="authenticationManager" ref="authenticationManager" />
        <b:property name="filterProcessesUrl" value="/j_spring_security_check" />
        <b:property name="authenticationFailureUrl" value="/admin/login?error=1" />
    </b:bean>
    
    <b:bean id="logoutFilter" class="org.springframework.security.ui.logout.LogoutFilter">
         <custom-filter position="LOGOUT_FILTER" />
    	 <b:constructor-arg value="/admin/login" />
    	 <b:constructor-arg >
	    	 <b:list>
	    	 	<b:bean class="com.sample.yours.LogoutHandler" ></b:bean>
	    	 	<b:bean class="org.springframework.security.ui.logout.SecurityContextLogoutHandler" ></b:bean>
	    	 </b:list>
    	 </b:constructor-arg>
    </b:bean>
    
    <b:bean id="passwordEncoder" class="org.springframework.security.providers.encoding.Md5PasswordEncoder">
    </b:bean>

    <authentication-provider>
       <!-- <password-encoder hash="md5"/> -->
       <password-encoder  ref="passwordEncoder" />
        
        <jdbc-user-service data-source-ref="dataSource"  
        users-by-username-query="SELECT u.username, u.password, u.enable FROM user u WHERE u.username=?"
        authorities-by-username-query="SELECT username, action FROM user_action ua WHERE ua.username=?"
        />
   </authentication-provider>

   <!-- Automatically receives AuthenticationEvent messages -->
   <b:bean id="loggerListener" class="org.springframework.security.event.authentication.LoggerListener"/>   
</b:beans>


这个配置文件里面还替换了默认的Logout处理,增加了一个自定义的logoutHandler。
2 楼 kirk1127 2009-08-04  
能不能把配置文件贴出来看下,我想自定义一个authenticationProcessingFilter,不知道怎么配置的
1 楼 shiren1118 2008-06-03  
用Spring Security 2.0.1做权限控制管理和RBAC。哪个更加好点?

相关推荐

    Spring Security实战源码

    ssecurity-customFilter项目是Spring Security实战(六)的源码; ssecurity-rememberMe项目是Spring Security实战(七)的源码; 本人开发工具是IDEA,每个项目中的代码均可以运行并测试。Eclipse也是一样可以运行...

    SpringSecurity笔记2-SpringSecurity命名空间

    在"SpringSecurity笔记2-SpringSecurity命名空间"的学习中,还会涉及到如何自定义过滤器链,以及如何通过`&lt;custom-filter&gt;`元素插入自定义的SpringSecurity过滤器。同时,理解`&lt;access-denied-handler&gt;`和`...

    spring security demo2

    - **CustomFilter**:可以通过创建自定义过滤器来扩展Spring Security的功能。 - **AuthenticationProvider** 和 **UserDetailsService**:可以实现这些接口以实现自定义的认证和用户信息加载逻辑。 8. **异常...

    spring security3.1 实现验证码自定义登录

    例如,我们可以创建一个CustomFilter,该过滤器在登录请求到达AuthenticationProvider之前检查验证码。这样,如果验证码无效,过滤器可以直接返回错误信息,避免不必要的数据库查询。 最后,为了方便开发,我们可以...

    Spring_Security_多页面登录配置教程

    ### Spring Security 多页面登录配置教程 #### 一、引言 在开发Web应用程序时,安全性和用户体验同样重要。Spring Security作为一个强大的框架,为开发者提供了丰富的功能来保护Web应用的安全。其中,支持多页面...

    Spring Security参考手册中文版

    - **The Security Filter Chain**:解释过滤器链的机制及其在 Spring Security 中的作用。 - **DelegatingFilterProxy**:作为 Spring 安全过滤器链的入口点。 - **FilterChainProxy**:管理过滤器链的具体执行。 - ...

    Spring Security 3 与 CAS单点登录配置.doc

    Spring Security 3 与 CAS 单点登录配置 Spring Security 3 是一个基于 Java 的安全框架,提供了灵活的身份验证、授权和访问控制功能。CAS(Central Authentication Service)是一种流行的单点登录协议,允许用户...

    spring security 参考手册中文版

    Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 ...

    spring security进级篇 V 自定义标签控制显示

    Spring Security的核心组件包括Filter Security Interceptor(过滤器安全拦截器)和Access Decision Manager(访问决策管理器),它们负责检查请求并决定是否允许访问。 自定义标签在Spring Security中扮演着重要...

    spring security3配置

    &lt;beans:bean id="myAccessDecisionManagerBean" class="springSecurity.MyAccessDecisionManager"&gt; &lt;!-- 配置项 --&gt; &lt;!-- 安全元数据源 --&gt; &lt;beans:bean id="securityMetadataSource" class="springSecurity....

    springsecurity.pdf

    - **自定义过滤器**:通过 `&lt;http&gt;` 元素下的 `&lt;intercept-url&gt;` 或 `&lt;custom-filter&gt;` 子元素来自定义过滤规则。 - **设置自定义认证入口点**:使用 `&lt;authentication-entry-point&gt;` 元素来自定义认证失败后的处理...

    spring security 2.0 命名空间配置(带例子)

    通过SpringSecurityTest这个压缩包文件,你可以找到相关的示例代码和配置,以帮助你更好地理解这些概念。动手实践是学习Spring Security的最佳途径,你可以尝试修改配置,观察不同设置对应用程序安全行为的影响。 ...

    SpringSecurity 3.0.1.RELEASE.CHM

    1.1. Spring Security是什么? 1.2. 历史 1.3. 发行版本号 1.4. 获得Spring Security 1.4.1. 项目模块 1.4.1.1. Core - spring-security-core.jar 1.4.1.2. Web - spring-security-web.jar 1.4.1.3. Config -...

    spring security 3 的学习的帮助文档

    11. **自定义配置(Custom Configuration)**:Spring Security允许高度的自定义,学习者需要理解如何扩展核心类,创建自己的认证和授权策略。 通过这两个帖子和设计文档的学习,你应该能够建立一个坚实的基础,...

    spring-security入门

    在`&lt;http&gt;`元素内部,还可以使用`&lt;custom-filter&gt;`或`&lt;filter-mapping&gt;`来定义自定义的安全过滤器,以便扩展Spring Security的功能。 接下来,我们需要配置用户认证和授权。这通常通过`&lt;authentication-manager&gt;`...

    Spring Security 3.0.3

    开发者可以通过 `&lt;custom-filter&gt;` 标签添加自定义的过滤器来扩展 Spring Security 的功能。 #### 设置自定义认证入口点 通过 `&lt;authentication-entry-point&gt;` 标签可以设置当用户未通过认证时的自定义处理行为。 ...

    xumumi-system-security:基于 Spring Security 开发的 jwt 安全模块

    3. **Token Authentication Filter**:一个自定义的Spring Security过滤器,它会在每个请求中检查Authorization头中的JWT,并根据JWT内容完成认证过程。 4. **Authorization Configuration**:定义权限控制规则,...

    custom login

    在Spring Boot框架中,"custom login"通常指的是自定义用户认证和授权的过程,因为Spring Boot默认使用了Spring Security作为安全组件。Spring Security是一个强大的且高度可配置的安全框架,用于处理Web应用的安全...

    spring-boot-reference.pdf

    Spring Boot Documentation 1. About the Documentation 2. Getting Help 3. First Steps 4. Working with Spring Boot 5. Learning about Spring Boot Features 6. Moving to Production 7. Advanced Topics II. ...

    spring-cloud-gateway-example-master.zip

    Gateway可以结合Spring Security实现权限控制,也可以集成Spring Boot Actuator进行性能监控。 8. **过滤器链执行机制** 每个路由定义的过滤器会按照顺序执行,全局过滤器在路由过滤器之前运行,形成一个完整的...

Global site tag (gtag.js) - Google Analytics