我正在将 springboot 和 spring security 用于 Web 应用程序,我的用户登录可以在默认登录页面上正常工作,如果我使用带有以下代码的自定义 login.html 也可以正常工作。
http.formLogin(form ->{
form.loginPage("/login").permitAll();
form.defaultSuccessUrl("/files");
但是如果我设置不同的路径,例如:
form.loginPage("/signin").permitAll();
“自定义”登录 URL 的控制器:
@GetMapping("/signin")
public String getSingIn(Model model){
model.addAttribute("user", UserDTO.builder().build());
return "login";
}
登录表单有效,但我无法对其进行授权。我只是再次重定向到登录页面(“/signin”)
<body>
<h1>Please Log In</h1>
<form method="POST" th:action="@{'/login'}">
<div>
<input type="text" name="username" id="username" placeholder="Username" />
</div>
<div>
<input type="password" name="password" id="password" placeholder="Password" />
</div>
<input type="submit" value="Log in" />
</form>
</body>
</html>
我只是想知道我是否做错了什么,或者登录表单是否必须始终为 /login ?
在您的情况下,您尝试使用自定义登录路径,它不是静态页面,而是 MVC URL。在这种情况下,我猜 Spring Boot 假定登录处理 URL 与 formlogin 配置中提供的自定义 MVC URL 相同。
因此,您必须告诉 Spring Boot 保持登录处理 URL 与默认 URL 相同,或者您也可以自定义它。 在您的情况下,修改后的 Spring Security 配置如下:-
http.formLogin(form ->{
form.loginPage("/signin").loginProcessingUrl("/login").permitAll();
form.defaultSuccessUrl("/files");