集成Spring Security后发送post请求403错误,get请求通过
前提
是建立在后端已经做了跨域处理的前提下
处理跨域问题
最近在做springcloud项目中集成avtiviti工作流模块,工作流需要依赖 activiti-spring-boot-starter,此依赖中自带了spring security starter的依赖,因此出现里跨域的问题。
- 配置SecurityConfig ,解决跨域;
- 代码粘贴如下;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOriginPattern("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
source.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(source);
}
}
- 此时get请求可以正常访问。
403 Forbidden
发现在post,delete..等请求方式中出现403拒绝访问的问题
查阅资料
基于spring security,为了防止跨站提交攻击,通常会启用csrf,所有http请求都被会CsrfFilter拦截,而CsrfFilter中有一个私有类DefaultRequiresCsrfMatcher,POST方法被排除在外了,也就是说只有GET|HEAD|TRACE|OPTIONS这4类方法会被放行。
参考资料:
Spring Security笔记:解决CsrfFilter与Rest服务Post方式的矛盾
解决方法 禁用csrf拦截
//同样在SecurityConfig配置中
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable() // 解决POST请求403错误
.authorizeRequests()
.anyRequest().permitAll(); // 允许
}
: 如有其他解决方法,欢迎各位大神指点!!万分感谢!