仅限Spring Security Authenticated用户

时间:2012-10-15 14:54:42

标签: spring spring-security

我刚开始阅读Spring Security 3.1,我想知道在访问系统上的任何页面之前,如何通过登录页面强制用户进行身份验证。在教程中,我看到以下代码

<http use-e xpressions="true">
    <intercept-url pattern="/index.jsp" access="permitAll" />
    <intercept-url pattern="/secure/extreme/**" access="hasRole('supervisor')" />
    <intercept-url pattern="/secure/**" access="isAuthenticated()" />
    <intercept-url pattern="/listAccounts.html" access="isAuthenticated()" />
    <intercept-url pattern="/post.html" access="hasAnyRole('supervisor','teller')" />
    <intercept-url pattern="/**" access="denyAll" />
    <form-login />
</http>

从上面的配置中我可以看到我必须维护url模式列表。有没有办法简化这一点,每个用户必须先登录“/ login”才能访问任何其他页面?

编辑:

我已按照以下方式编辑了我的配置,并按预期工作

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/login" access="permitAll" />
    <intercept-url pattern="/loginfailed" access="permitAll" />
    <intercept-url pattern="/logout" access="permitAll" />
    <form-login login-page="/login" default-target-url="/welcome"
        authentication-failure-url="/loginfailed" />
    <logout logout-success-url="/login" />
    <intercept-url pattern="/**" access="isAuthenticated()" />
</http>

1 个答案:

答案 0 :(得分:3)

从上到下按顺序检查网址规则。匹配的第一个是使用的那个。

在此示例中,最后一行

<intercept-url pattern="/**" access="denyAll" />

&#34;赶上所有&#34;规则。它适用于与上述任何规则都不匹配的所有请求(&#34; / **&#34;)。

在目前的形式中,无论如何都会拒绝所有人访问。如果将其更改为

<intercept-url pattern="/**" access="isAuthenticated()" />

相反,除非另有说明,否则它将需要对所有页面进行身份验证,这将导致Spring安全性将未经身份验证的用户重定向到登录过程。