Spring安全性中的多个<http>元素</http>

时间:2011-06-02 09:54:58

标签: spring spring-security

最近Spring Security已经给了机会配置几个<http>元素。我正在尝试为映射模式/ foo / *的所有URL设置配置,为其余映射设置另一个配置。现在我有两个登录页面,一个在/ login中设置,另一个在/ foo登录中。所以我希望映射/ foo / **的所有URL都针对/ foo / login进行登录。

我创建了一个类似下面的配置,但是当我输入一个像/ foo / something(不应该允许匿名用户)的URL而不是去/ foo / login时,它会转到/ login。

Spring Security版本 3.1.0.RC1 。 知道可能发生的事情吗?

感谢。

<sec:http auto-config="true" pattern="/foo/**" entry-point-ref="ajaxAuthenticationEntryPoint">
    <sec:intercept-url pattern="/foo/login" access="ROLE_ANONYMOUS,ROLE_BASIC,ROLE_ADMIN" />
    ...
    <!-- other sec:intercepts for some /foo/* urls -->
    ...
    <sec:intercept-url pattern="/foo/**" access="ROLE_BASIC" />

    <sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" />

    <sec:form-login login-page="/foo/login" authentication-failure-url="/foo/login" default-target-url="/index" always-use-default-target="true" />

    <sec:session-management>
        <sec:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login" />
    </sec:session-management>
</sec:http>

<sec:http auto-config="true" pattern="/**" entry-point-ref="ajaxAuthenticationEntryPoint">
    <!-- some sec:intercepts for some urls -->
    ...

    <sec:intercept-url pattern="/**" access="ROLE_ADMIN" />

    <sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" />

    <sec:form-login login-page="/login" default-target-url="/index" always-use-default-target="true" />

    <sec:session-management>
        <sec:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login" />
    </sec:session-management>
</sec:http>

3 个答案:

答案 0 :(得分:1)

只是一个猜测。可能是模式是添加剂吗?

所以注释如下:

<sec:http auto-config="true" pattern="/foo/**" entry-point-ref="ajaxAuthenticationEntryPoint">
    <sec:intercept-url pattern="/foo/**" access="ROLE_BASIC" />
</sec:http>

拦截/foo/foo/**。这将导致foo/something请求被您的第二个http定义拦截,pattern="/**"

答案 1 :(得分:1)

AuthenticationEntryPoint负责重定向到登录页面。您已注入自定义入口点,该入口点将覆盖login-page元素上的form-login属性。

ajaxAuthenticationEntryPoint重定向到/login吗?

理想情况下,Spring Security应检测您是否尝试使用自定义入口点和login-page并报告警告。

答案 2 :(得分:0)

使用http元素中的pattern属性会导致Spring Security 3.1在读取其余内部元素之前将该模式应用于URL,因此如果它不匹配则会忽略所有内部元素并继续下一个http元素。

/ foo / login的登录页面中的某些内容是否引用了/ **模式所涵盖的资源?