记使用spring security 后跨域配置失效的问题

Posted java-北京-菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记使用spring security 后跨域配置失效的问题相关的知识,希望对你有一定的参考价值。

之前项目使用的都是shiro, 解决跨域问题都是实现 WebMvcConfigurer 接口, 重写以下方法

    @Override
    public void addCorsMappings(CorsRegistry registry) 
        registry.addMapping("/**")
                .allowCredentials(true)
                .allowedHeaders("*")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .maxAge(3600);
    

当然也可以使用 CorsFilter 的方法

但是新项目用了 spring security, 如此配置还存在跨域问题, 后来查了一些资料, 需要再security的配置中加入一些配置

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception
    
        httpSecurity
                // CRSF禁用,因为不使用session
                .csrf().disable()
                // 认证失败处理类
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
                // 基于token,所以不需要session
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                // 过滤请求
                .authorizeRequests()
                // 对于登录login 验证码captchaImage 允许匿名访问, 对小程序接口不拦截
                .antMatchers("/login", "/captchaImage", "/api/**", "/wx/**").anonymous()
                .antMatchers(
                        HttpMethod.GET,
                        "/*.html",
                        "/**/*.html",
                        "/**/*.css",
                        "/**/*.js"
                ).permitAll()
                .antMatchers("/profile/**").anonymous()
                .antMatchers("/common/download**").anonymous()
                .antMatchers("/swagger-ui.html").anonymous()
                .antMatchers("/swagger-resources/**").anonymous()
                .antMatchers("/webjars/**").anonymous()
                .antMatchers("/*/api-docs").anonymous()
                .antMatchers("/druid/**").anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                //设置跨域, 如果不设置, 即使配置了filter, 也不会生效
                .cors()
                .and()
                .headers().frameOptions().disable();
        httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
        // 添加JWT filter
        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
    

 

以上是关于记使用spring security 后跨域配置失效的问题的主要内容,如果未能解决你的问题,请参考以下文章

uniapp h5打包后跨域问题

OPTIONS 返回 200 后跨域 JQuery AJAX POST 未完成

SpringBoot 优雅配置跨域多种方式及Spring Security跨域访问配置的坑

Spring Security (CORS)跨域资源访问配置

Spring Security ——跨域配置

Spring Security---跨域访问和跨站攻击问题详解