Simple386 2023-11-06 16:03 采纳率: 0%
浏览 31

Sping security 登录页面重定向问题

Spring security 简单的配置了登录页面,打开就是重定向次数过多

  @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .csrf(AbstractHttpConfigurer::disable)
                .cors(AbstractHttpConfigurer::disable)
                .formLogin( form -> form
                        .loginPage("/mylogin.html")
                        .loginProcessingUrl("/dologin")
                        .failureUrl("/mylogin")
                        .successForwardUrl("/success"))
                .authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> authorizationManagerRequestMatcherRegistry
                        .requestMatchers("/mylogin","/dologin").permitAll()
                        .anyRequest()
                        .authenticated());
        return httpSecurity.build();
    }

 @RequestMapping("/mylogin")
    public String login () {
        return "mylogin";
    }
  @PostMapping("/dologin")
    public String dologin () {
        return "suceess";
    }

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-07 00:45
    关注

    【以下回答由 GPT 生成】

    问题原因是登录成功后的重定向导致了重复的重定向请求。可以通过以下几个步骤来解决:

    1. 首先,修改dologin()方法,登录成功时,将重定向到正确的页面而不是返回字符串"success",可以使用RedirectView来实现重定向:
    @PostMapping("/dologin")
    public RedirectView dologin() {
        return new RedirectView("/success");
    }
    
    1. 接着,修改SecurityFilterChain配置。在.formLogin()后添加.permitAll()方法,以允许所有用户访问登录页面。
    .formLogin(form -> form
        .loginPage("/mylogin.html")
        .loginProcessingUrl("/dologin")
        .failureUrl("/mylogin")
        .successForwardUrl("/success"))
    .permitAll()
    
    1. 添加一个新的控制器方法,用于处理登录成功后的重定向页面:
    @GetMapping("/success")
    public String success() {
        return "success";
    }
    

    通过这些修改,登录成功后只会进行一次重定向,从而解决了重定向次数过多的问题。

    完整代码如下:

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
            .csrf(AbstractHttpConfigurer::disable)
            .cors(AbstractHttpConfigurer::disable)
            .formLogin(form -> form
                .loginPage("/mylogin.html")
                .loginProcessingUrl("/dologin")
                .failureUrl("/mylogin")
                .successForwardUrl("/success"))
            .permitAll()
            .authorizeHttpRequests(authorizationManagerRequestMatcherRegistry -> authorizationManagerRequestMatcherRegistry
                .requestMatchers("/mylogin","/dologin").permitAll()
                .anyRequest()
                .authenticated());
        return httpSecurity.build();
    }
    
    @RequestMapping("/mylogin")
    public String login() {
        return "mylogin";
    }
    
    @PostMapping("/dologin")
    public RedirectView dologin() {
        return new RedirectView("/success");
    }
    
    @GetMapping("/success")
    public String success() {
        return "success";
    }
    

    注意:如果仍然遇到问题,请确认是否有其他相关配置或拦截器引起的重定向。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月6日