Spring,CORS和j_spring_security_logout

时间:2014-10-14 18:15:04

标签: java spring cors

我需要在Spring Security中使用CORS。我已经成功地使用在app-beans.xml中配置的OncePerRequestFilter来获取登录和基本安全性,如下所示:

<bean id="corsAwareAuthenticationFilter"class="org.broadinstitute.portal.servlet.CorsAwareAuthenticationFilter"/>
<security:http use-expressions="true">
  <security:custom-filter ref="corsAwareAuthenticationFilter" after="PRE_AUTH_FILTER"/>
...

我基本上遵循了这个问题的方法:Cross-Origin Resource Sharing with Spring Security

我在app-beans.xml中注销的配置很简单:

    <security:logout delete-cookies="JSESSIONID"/>

没有CORS就可以正常工作。

我的问题是退出。 CORS正在停止访问j_spring_security_logout。知道为什么登录时会调用OncePerRequestFilter,而不是在注销时调用它?

编辑添加:

感谢alain.janinm,我解决了这个问题。我需要在LOGOUT_FILTER之前设置我的过滤器。以下配置添加解决了问题:

    <security:custom-filter ref="corsAwareAuthenticationFilter" before="LOGOUT_FILTER"/>

注意,使用position =“LOGOUT_FILTER”不起作用,因为它使我的过滤器与Spring LOGOUT_FILTER位于相同的位置。我的过滤器与LOGOUT_FILTER的功能不同 - 我所做的就是添加CORS头。所以我实际上还需要Spring LOGOUT_FILTER才能被调用。

1 个答案:

答案 0 :(得分:0)

感谢alain.janinm,我解决了这个问题。我需要在LOGOUT_FILTER之前设置我的过滤器。以下配置添加解决了问题:

<security:custom-filter ref="corsAwareAuthenticationFilter" before="LOGOUT_FILTER"/>

注意,使用position =&#34; LOGOUT_FILTER&#34;没有工作,因为这使我的过滤器处于与Spring LOGOUT_FILTER相同的位置。我的过滤器与LOGOUT_FILTER的功能不同 - 我所做的就是添加CORS头。所以我实际上还需要Spring LOGOUT_FILTER才能被调用。