Spring身份验证登录失败不会转发到控制器

时间:2019-12-06 06:15:25

标签: spring-boot spring-mvc spring-security

我使用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>

1 个答案:

答案 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")