记使用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 后跨域配置失效的问题的主要内容,如果未能解决你的问题,请参考以下文章
OPTIONS 返回 200 后跨域 JQuery AJAX POST 未完成
SpringBoot 优雅配置跨域多种方式及Spring Security跨域访问配置的坑