Spring Boot太多重定向

11

我正在使用Thymeleaf和Spring Boot开发一个简单的登录表单。当我在Chrome中尝试访问以下URL时:“http://localhost:8080/login”,我收到一个错误,显示“ERR_TOO_MANY_REDIRECTS”。我已经尝试清除浏览器中的缓存和Cookie,但仍然收到相同的错误。

我尝试通过将以下属性添加到我的application.properties中来禁用默认安全登录屏幕:security.basic.enabled=false

并在我的SecurityConfig中添加了以下配置,以便任何URL(除了“/login”和“/resources”)都会得到身份验证:

@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个回答

7
您的控制器捕获并重定向到相同的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都会:

  • 由于您的SecurityConfig中的.loginPage(“/ login”)而重定向到/login
  • 然后使用@RequestMapping(value =“/ login”捕获它
  • 然后使用“redirect:/ login”重定向到/ login
  • 然后随意重新捕获和重定向。

谢谢Alex,我尝试重定向到另一个URL,即/signin,但似乎出现了问题! - user676567
是的,每个人都可以看到登录页面,我只是想说一个安全请求将被重定向到“/login”,这会增加“重定向太多次”的风险。 - alexbt
@ASR4 我也遇到了同样的问题。你解决了吗? - joel
1
@joel 我已经发布了一个问题并按照提到的答案进行了操作: https://stackoverflow.com/questions/54565184/how-to-pass-genericfilterbean-data-to-websecurityconfigureradapter-in-spring-boo - ASR4
1
@ASR4 谢谢,这非常有帮助。 - joel
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接