我刚开始阅读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>
答案 0 :(得分:3)
从上到下按顺序检查网址规则。匹配的第一个是使用的那个。
在此示例中,最后一行
<intercept-url pattern="/**" access="denyAll" />
&#34;赶上所有&#34;规则。它适用于与上述任何规则都不匹配的所有请求(&#34; / **&#34;)。
在目前的形式中,无论如何都会拒绝所有人访问。如果将其更改为
<intercept-url pattern="/**" access="isAuthenticated()" />
相反,除非另有说明,否则它将需要对所有页面进行身份验证,这将导致Spring安全性将未经身份验证的用户重定向到登录过程。