解决spring boot + security 的cors跨域问题

1、支持跨域,在需要跨域的控制器类上添加注解

//表示此类中所有接口可以是实现跨域
@CrossOrigin(origins = "*")

2、 添加security的配置类 

2.1重要的是:

/    跨域的配置类
    @Autowired
    private CustomCorsConfigurationSource corsConfigurationSource;
.cors().configurationSource(corsConfigurationSource)
.and()

2.2添加配置类 

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {

        //不重写方法,调用父类方法
//        super.configure(http);

        //将登录验证token过滤器放在过滤器链最前面
        http.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);

        // 给一个异常处理器,走我们自定义的拒绝访问处理器,无权限走这个处理器
        http.exceptionHandling().
                accessDeniedHandler(accessDeniedHandler)
//        给一个异常处理器,走我们自定义的认证失败处理器,认证失败走这个处理器
                .authenticationEntryPoint(restAuthenticationEntryPoint);


        //http请求配置信息   ----!!!!!!! todo   需要鉴权的接口,不能被允许匿名访问!!!!!否则会报无权限
        http
                //预检请求是浏览器发现不是简单请求后,封装一个OPTIONS请求到服务器,根据服务器的返回值来判断是否可以进行跨域,
                // 可以的话,后面还有一次真正带数据的请求。上面的response部分:就是预检请求后服务器端的响应
                //预检请求通过
                .cors().configurationSource(corsConfigurationSource)
                .and()
                //关闭csrf
                .csrf().disable()
                //不通过session获取securityContext
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers(
                        "/user/notLogIn/**"
                ).anonymous()
                //除了上面的所有请求全部需要鉴权认证
                .anyRequest().authenticated();

    }

2.3、添加cors配置类

//配置预检请求通过
@Configuration
public class CustomCorsConfigurationSource implements CorsConfigurationSource {

    @Override
    public CorsConfiguration getCorsConfiguration(HttpServletRequest request) {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOriginPattern("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        config.setAllowCredentials(true);
        config.setMaxAge(3600L);
        return config;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值