Spring Boot太多重定向

时间:2016-09-03 19:32:10

标签: spring-boot

我正在使用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";
        }

任何人都知道为什么会这样?

1 个答案:

答案 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
  • 重定向到/ login 然后用@RequestMapping(value="/login"
  • 抓住
  • 然后使用/login
  • 重定向到"redirect:/login"
  • 然后随意重新捕捉和重定向。