我使用Spring Security处理登录和登录错误。我已经设置了登录失败的网址。但是,当我给它一个不好的凭据时,该请求似乎未由控制器处理。我尝试在处理failuer身份验证的控制器方法上设置断点,但它根本不会跳转到该方法。我没有登录名?错误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>
答案 0 :(得分:0)
删除此
@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")