我正在使用Thymeleaf和Spring Boot开发一个简单的登录表单。当我尝试在Chrome中访问以下网址时:“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都将:
.loginPage("/login")
中的SecurityConfig
而重定向到/log @RequestMapping(value="/login"
捕获的/login
重定向到"redirect:/login"
关于spring-boot - Spring Boot重定向过多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39310634/