阅读量:0
CORS 是解决跨域访问的一种策略,如果在 Spring boot 或者 Spring MVC 框架下使用可以说是零门槛、零难度。但是一旦项目引用了 security 后,却并不是那么容易了,不管你怎么配置,总是不生效,无法对指定的域名和源放行,也就是说,你想让你的目标域名可以使用js调用你的应用,却发现总是被 拒绝,报cors异常。
1、首先确保 spring mvc + security 可以正常运行;
2、在 spring security 的配置文件中配置必要的两个 bean,如下:
<!-- CORS 配置 --> <bean id="corsConfigurationSource" class="org.springframework.web.cors.UrlBasedCorsConfigurationSource"> <property name="corsConfigurations"> <map> <entry key="/**"> <bean class="org.springframework.web.cors.CorsConfiguration"> <property name="allowCredentials" value="true"/> <property name="allowedHeaders"> <list> <value>*</value> <!-- 允许的请求头 --> </list> </property> <property name="allowedMethods"> <list> <value>GET</value> <value>POST</value> <value>PUT</value> <value>DELETE</value> <value>OPTIONS</value> <!-- 允许的请求方法 --> </list> </property> <property name="allowedOrigins"> <list> <!-- 允许的来源 --> <value>http://www.xxxxx.com</value> <value>http://xxxxx.com</value> </list> </property> </bean> </entry> </map> </property> </bean> <bean id="corsFilter" class="org.springframework.web.filter.CorsFilter"> <constructor-arg ref="corsConfigurationSource"/> </bean> <!-- CORS 配置结束 -->
以上配置网上都有,非常简单,照抄就行了。
3、指定 corsFilter 过滤器在其他 过滤器之前执行;;
<security:http auto-config="true" use-expressions="true"> <security:cors/> <!-- 启用 cors --> <!-- 其他配置 --> <!-- 必须指定 corsFilter 过滤器在所有的安全过滤器之前被注入执行,否则后面关于 cors 的配置完全 失效--> <security:custom-filter ref="corsFilter" before="CHANNEL_FILTER"/> </security:http>
看清楚了,必须把 <security:custom-filter ref="corsFilter" before="CHANNEL_FILTER"/> 加上,否则,corsFilter 过滤器是不起作用滴!!!!!!!