Spring Security 配置 CORS 失效的问题

avatar
作者
筋斗云
阅读量: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 过滤器是不起作用滴!!!!!!!

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!