Spring Security 3自定义过滤器和URL模式

时间:2016-01-20 18:01:28

标签: java xml spring spring-mvc spring-security

我已经配置了一个扩展AbstractPreAuthenticatedProcessingFilter的自定义预验证过滤器。

根据我的理解,我可以指定哪些网址格式使用此过滤器,并指定任何我不想使用任何过滤器或安全性的网址。

我正在使用Spring Security 3.2和XML配置,因此我认为这样的事情应该有用。

<security:http pattern="/login" use-expressions="true" security="none">
    </security:http>


<security:http pattern="/home" use-expressions="true" auto-config="true"
        entry-point-ref="http403EntryPoint">
        <security:custom-filter position="PRE_AUTH_FILTER"
            ref="openTokenFilter" />
        <security:session-management
            invalid-session-url="/login" />
        <security:session-management>
            <security:concurrency-control
                max-sessions="1" error-if-maximum-exceeded="true" />
        </security:session-management>
        <security:access-denied-handler error-page="/login"/> 
        <security:logout delete-cookies="JSESSIONID"/>
    </security:http>

通过为security="none"指定pattern="/login",我认为在访问“localhost:8080 / login”时,这不会调用过滤器。但是,它仍在调用过滤器。

过滤器似乎有一些全局设置,每个请求都会调用它。我正在使用Spring Boot,因此我没有web.xml文件或任何自定义servlet配置。

基本上,我希望过滤器适用于除“/ login”之外的每个URL。

1 个答案:

答案 0 :(得分:0)

以下句子引自spring doc:

  

要使用表达式来保护单个URL,您首先需要   将<http>元素中的use-expressions属性设置为true。    Spring Security将期望<intercept-url>元素的访问属性包含 Spring EL表达式。该   表达式应该计算为布尔值,定义是否访问   是否应该被允许

所以你应该删除use-expressions =“true”并使用pattern =“/ login *”。