cors跨域

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class CorsSecurityConfig extends WebSecurityConfigurerAdapter {




//自定义过滤器

@Autowired
YourCorsFilter yourCorsFilter;

//自定义token过滤器
        @Autowired
TokenFilter tokenFilter;
        //自定义token认证provider
@Autowired
TokenAuthenticationProvider tokenAuthenticationProvider;

@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**")
.antMatchers("/swagger-resources/**", "/swagger-ui/**", "/v2/api-docs/**")

.antMatchers("/swagger-ui.html/**")
.antMatchers("/swagger-ui.htm/**")
;
}





@Override
public void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class).addFilterBefore(
yourCorsFilter
, TokenFilter.class);
http.cors().and()
.csrf().disable()
// Disable CSRF for simplicity, be careful with this in production
.authorizeRequests()
.antMatchers("/my-service/**").authenticated()

.antMatchers("/swagger-ui.html/**").permitAll()
.antMatchers("/swagger-ui.htm/**").permitAll()

.antMatchers(HttpMethod.OPTIONS).permitAll()
.antMatchers(HttpMethod.POST).authenticated()

.antMatchers(HttpMethod.GET).authenticated()

.antMatchers(HttpMethod.PUT).authenticated()
.antMatchers(HttpMethod.DELETE).authenticated()
.antMatchers(HttpMethod.PATCH).authenticated()
;


;;

}


@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(
tokenAuthenticationProvider
);
}




}




public class
TokenAuthenticationProvider implements AuthenticationProvider, InitializingBean {



}


@Order(0)
@Component
public class YourCorsFilter extends GenericFilterBean {


public ApaasCorsFilter() {}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS,PATCH");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
//options 方法直接返回ok 绕过认证 options通常不带authrization
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
return;
}

filterChain.doFilter(servletRequest, response);
}

}
posted @   清明雨下  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示