我正在使用 Thymeleaf 和 Spring Boot 开发一个简单的登录表单。当我尝试在 Chrome 中点击以下 URL:“http://localhost:8080/login”时,我收到一条错误消息“ERR_TOO_MANY_REDIRECTS”。我尝试清除浏览器中的缓存和 cookie,但仍然遇到相同的错误。
我尝试通过将以下属性放入我的 application.properties 中来禁用默认安全登录屏幕:
security.basic.enabled=false
并将以下配置添加到我的 SecurityConfig 中,以便除“/login”和“/resources”之外的任何 URL 都将获得身份验证:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserRepository userRepository;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
我的 LoginController 很简单:
@Controller
public class LoginController {
@RequestMapping(value="/login", method=RequestMethod.GET)
public String loadForm(Model model) {
model.addAttribute("user", new User());
return "redirect:/login";
}
有人知道为什么会发生这种情况吗?
您的控制器捕获并重定向到相同的网址:
@RequestMapping(value="/login", method=RequestMethod.GET)
public String loadForm(Model model) {
model.addAttribute("user", new User());
return "redirect:/login";
}
此外,您的 SecurityConfig 定义了以下内容:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
...
.loginPage("/login")
}
.loginPage()
的 javadoc 是这样说的:
需要身份验证时重定向到的登录页面
因此,发出的任何安全请求或直接访问 /login 都会:
.loginPage("/login")
中有
SecurityConfig
@RequestMapping(value="/login"
/login
重定向到
"redirect:/login"
您的控制器在循环中工作,不使用重定向作为回报,只写文件名作为回报我已经更正了您的代码
公共类LoginController {
@RequestMapping(value="/login", method=RequestMethod.GET)
public String loadForm(Model model) {
model.addAttribute("user", new User());
return "login";
}
}
当您必须将控制权传递给其他控制器处理程序时使用重定向