【问题标题】:Spring Security Authenticated User only仅限 Spring Security 认证用户
【发布时间】:2012-10-15 14:54:42
【问题描述】:

我刚开始阅读 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>

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

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

    在本例中,最后一行

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

    是“包罗万象”的规则。它适用于不符合上面任何规则的所有请求(“/**”)。

    在目前的形式下,它拒绝任何人访问,无论如何。如果你把它改成

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

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

    【讨论】:

    • 我已经在我的帖子中更新了我的配置。感谢您的帮助。
    猜你喜欢
    • 2016-07-14
    • 2015-03-11
    • 2012-02-08
    • 1970-01-01
    • 2012-08-15
    • 2016-08-11
    • 2011-03-11
    • 2015-12-17
    • 2016-11-15
    相关资源
    最近更新 更多