Spring Security登录成功后报302

 在做前后端分离项目中因为使用了spring security 安全框架,登录认证成功之后再调用其他接口没问题但是只调用provider这个接口中出现302重定向

上网查了很多文章,从spring security原理到302的原理应用与解决办法,我也跟着审视了一通代码

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http
                    .addFilterBefore(checkTokenFilter, UsernamePasswordAuthenticationFilter.class)//登录前进行过滤
//                    .httpBasic(AbstractHttpConfigurer::disable)//禁用basic明文验证
//                    .csrf(AbstractHttpConfigurer::disable)
                    .authorizeHttpRequests((auth) ->{
                try{
                    auth
                            .requestMatchers("/sys/user/login")  .permitAll()
                            .anyRequest()
                            .authenticated();

                }catch (Exception e){
                    throw new RuntimeException(e);
                }
            })
                    .formLogin((form) -> form
                            .loginPage("/sys/user/login")
                            .successHandler(loginSuccessHandler)
                            .failureHandler(loginFailureHandler)

                            .permitAll())
                    .logout((logout) -> logout.permitAll())
                    .httpBasic(Customizer.withDefaults())
                    .csrf(csrf-> csrf.disable());//来关闭csrf进行测试

            return http.build();
    }

关于securityFilterChain的代码似乎没有什么问题,在排查后续代码中发现,我在LoginSuccessHandler和LoginFailureHandler中设置了客户端响应编码格式

response.setContentType("application/json;charset=UTF-8");

也就是说期望获取到的是json格式

但是我的后来控制器中,由于是mybatisplus代码自动生成的

@Controller
@RequestMapping("/sys/provide")
public class ProviderController {
}
@Controller并未改成 @RestController

@Controller:标识一个Spring类是Spring MVC controller处理器,

@RestController:@Controller和@ResponseBody的结合体,两个标注合并起来的作用。

@ResponseBody注解,返回实体对象

所以302不一定是重定向目标不正确或者是循环重定向,也有可能是前端收到的格式与期待不一样而已

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值