spring-boot - Spring身份验证登录失败不会转发到控制器
问题描述
我使用 spring security 来处理登录和登录错误。我已经设置了登录失败的 URL。但是,当我给它一个错误的凭据时,控制器似乎没有处理该请求。我尝试在处理失败者身份验证的控制器方法上设置断点,但它根本不会跳转到该方法。我没有登录名?错误 html。我只有一个 login.html 有谁知道为什么?
这是我的配置文件。
@Override
public void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests()
.antMatchers("/profile").hasRole("USER")
.antMatchers("/resources/**","/", "/home", "/signUp").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/homeSignedIn")
.failureUrl("/login?error")
.permitAll()
.and()
.rememberMe().tokenValiditySeconds(3600).key("mykey")
.and()
.logout()
.logoutUrl("/signOut")
.logoutSuccessUrl("/")
.permitAll();
}
这是我的控制器。
@GetMapping("/login")
public String loginPage(Model model){
Login login = new Login();
model.addAttribute("login", login);
return "login";
}
@GetMapping("/homeSignedIn")
public String loggedInPage(){
return "homeSignedIn";
}
@GetMapping("/signOut")
public String signOutPage(){
return "signOut";
}
@RequestMapping("/login?error")
public String loginError(Model model){
model.addAttribute("loginError", true);
return "login";
}
}
这是我的 login.html。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Login Page</title>
</head>
<body>
<p th:if="${loginError}" > Wrong Username or password </p>
<form th:action="@{/login}" th:object="${login}" class="form-horizontal" method="post">
<p align="middle">username: <input type="text" th:field="*{username}"></p>
<p align="middle">password: <input type="password" th:field="*{password}"></p>
<p align="middle"><input type="submit" value="Login"></p>
</form>
</body>
</html>
解决方案
删除这个
@RequestMapping("/login?error")
public String loginError(Model model){
model.addAttribute("loginError", true);
return "login";
}
修改这个
@GetMapping("/login")
public String loginPage(Model model, @RequestParam(value = "error", required = false) Boolean error){
if (error == null) {
Login login = new Login();
model.addAttribute("login", login);
} else {
model.addAttribute("loginError", true);
}
return "login";
}
并将配置更改为以下
.failureUrl("/login?error=true")
推荐阅读
- java - 如何处理 Selenium 3 中的 SSL 证书错误?
- javascript - 显示来自本地存储的图像时出现问题
- jira-rest-api - jira res-api 在描述中使用项目符号列表创建问题
- javascript - 从浏览器更改 firefox 的 prefs.js
- unity3d - 二维圆形对撞机中的孔
- apache-kafka - 我们如何将相同键的所有值合并为一个列表,并将键和值作为字符串返回 Kafka Streams
- ruby-on-rails - Puma 在 Elastic Beanstalk 的 Rails 6 API 唯一项目上坚持消息“工人提前终止”
- jquery - 想要使用 jQuery 从列中计算重复值
- java - 转换到 ChannelInactive 状态是否会清除 Netty 中的管道?
- java - 带有 Java 实现的 SOAP WS (JAX-WS):由于命名空间限定,我收到空参数