我正在使用Thymeleaf& amp ;;开发一个简单的登录表单。春季启动。当我尝试在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";
}
任何人都知道为什么会这样?
答案 0 :(得分:3)
您的控制器会捕获并重定向到相同的网址:
@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"