spring-boot - Spring Boot 太多重定向

标签 spring-boot

我正在使用 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 将:
  • 重定向到/login 因为 .loginPage("/login")在您的 SecurityConfig
  • 然后你用 @RequestMapping(value="/login" catch 它
  • 然后重定向到 /login"redirect:/login"
  • 然后随意重新捕获和重定向。
  • 关于spring-boot - Spring Boot 太多重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39310634/

    相关文章:

    java - ReactiveCrudRepository 与 R2dbcRepository

    jpa - Spring Boot 和 FlywayTest 导致 JPA Camel 路由在数据库重置期间抛出异常

    java - WAR 中的资源中的 HSQLDB

    java - Spring Boot 应用程序无法在 Elastic Beanstalk 上启动

    spring-boot - 从对实际应用程序运行验收测试中获取 jacoco 报告

    spring - 如何在 Spring Boot 应用程序中重写 DefaultListableBeanFactory?

    spring - 带有网络套接字的 Zuul

    java - 无法使用 mvn spring-boot :build-image 构建 war 文件的镜像

    java - WebService 类中的 Spring Autowired 不起作用

    具有可变段数的 Spring 路径