当 Spring Security 从 3.2.x 版发展到 4.0.0 版时,使用基于 XML 的配置时需要进行多次修改,如 Migration reference 中所述。 .经过仔细研究后,我仍在努力解决有关新 form-login@login-processing-url
的一些问题。属性。即使我已经指定它继续使用 /j_spring_security_check
作为路径,它保留了新的 /login
路径事件。
我一直在使用 Spring Security 和 SpringMVC,并开始使用 3.2.7 版进行开发。我有一个 Controller 映射路径 /login
到显示登录表单的页面,并根据收到的可能参数显示特定错误消息。下面是我的 Controller
@Controller
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(@RequestParam(value = "error", required = false) String error,
@RequestParam(value = "logout", required = false) String logout,
Model model) {
if (error != null) {
model.addAttribute("error", "Usuário e senha inválidos.");
}
if (logout != null) {
model.addAttribute("msg", "Logout bem sucedido.");
}
return "login";
}
}
在 3.2 版本中,我的
spring-security.xml
文件指定了 form-login@login-page
/login
的参数,因此显示了我的个性化登录表单(相同的路径用于 <logout>
)。现在,即使我已经明确配置了
form-login@login-processing-url
, /login
仍然重定向到 Spring Security 的默认登录页面。除此之外,即使我还指定了一个 logout@logout-url
属性,当登出时,spring 仍然将我重定向到带有“登出成功”消息的默认登录表单,而不是我自己的 Controller 来显示我的个性化登出消息。当我使用
/login?
路径,应用程序显示我自己的登录表单,但如果我调用 /login?logout
或 /login?error
,分别显示我的注销和错误消息,Spring 重定向到默认登录页面。问题:有没有办法完全禁用
/login
重定向? 我知道我可以简单地将我的个性化路径更改为其他内容,例如
/signin
并避免混淆,但我这样做是为了了解有关 Spring Security 4.x 的更多信息。此外,我担心用户输入 URL 而不是通过链接导航会简单地放在 spring 的默认登录页面上。此外,以下是我的
spring-security.xml
的摘录文件,已适应版本 4.x。<http auto-config="true" use-expressions="true" disable-url-rewriting="true">
<access-denied-handler error-page="/403" />
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/power/**" access="hasRole('ROLE_POWER_USER')" />
<form-login
login-page="/login" <!-- my controller -->
default-target-url="/"
login-processing-url="/j_spring_security_check" <!-- to reproduce 3.2 behaviour -->
authentication-failure-url="/login?error"
username-parameter="username"
password-parameter="password" />
<logout logout-success-url="/login?logout"
logout-url="/j_spring_security_logout"/>
<headers disabled="true"/>
<csrf disabled="false"/> <!-- I know it could be ommited -->
</http>
更新 (04/16/2015): 看起来像是 4.0.0 版本的错误。检查我的答案。
最佳答案
您需要做的是实现自定义 AuthenticationEntryPoint 以关闭登录重定向(设置为默认值)。
以下是一些入门阅读信息:
http://docs.spring.io/spring-security/site/docs/4.0.0.RELEASE/reference/htmlsingle/#auth-entry-point
这里还有一个例子来说明它是如何实现的:
http://krams915.blogspot.com.au/2010/12/spring-security-mvc-integration-using_26.html
关于spring - 有没有办法在 Spring Security 4.x 上禁用默认的 "/login"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661518/