我正在使用 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";
}
任何人都知道为什么会发生这种情况?
最佳答案
您的 Controller 捕获并重定向到相同的 url:
@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 page to redirect to if authentication is required
因此,任何安全请求或直接访问/login 将:
.loginPage("/login")
在您的 SecurityConfig
@RequestMapping(value="/login"
catch 它/login
与 "redirect:/login"
关于spring-boot - Spring Boot 太多重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39310634/