Spring、CORS 和 j_spring_security_logout
Posted
技术标签:
【中文标题】Spring、CORS 和 j_spring_security_logout【英文标题】:Spring, CORS, and j_spring_security_logout 【发布时间】:2014-12-09 15:27:42 【问题描述】:我需要将 CORS 与 Spring Security 一起使用。我已经成功地让登录和基本安全工作,使用在 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。
【问题讨论】:
我认为您必须定义一个位置为“LOGOUT_FILTER”的自定义过滤器。类似的东西:<security:custom-filter position="LOGOUT_FILTER" ref="yourCORSlogoutFilter" />
alain.janinm,非常感谢您指出我的解决方案。我已经编辑了我的问题以添加解决方案。
不客气!我建议您将您的编辑发布为答案(您可以回答您自己的问题),然后将其标记为已接受,对于具有相同 pb 的未来用户来说会更清楚。谢谢!
【参考方案1】:
感谢 alain.janinm,我解决了这个问题。我需要将过滤器设置为在 LOGOUT_FILTER 之前调用。下面的配置添加解决了这个问题:
<security:custom-filter ref="corsAwareAuthenticationFilter" before="LOGOUT_FILTER"/>
注意,使用 position="LOGOUT_FILTER" 不起作用,因为这将我的过滤器置于与 Spring LOGOUT_FILTER 相同的位置。我的过滤器与 LOGOUT_FILTER 的作用不同——我所做的只是添加 CORS 标头。所以我实际上仍然需要调用 Spring LOGOUT_FILTER。
【讨论】:
以上是关于Spring、CORS 和 j_spring_security_logout的主要内容,如果未能解决你的问题,请参考以下文章