我有一个使用spring-security-core插件和Atmosphere框架的Grails应用程序。
如果我从已经打开WebSocket连接的页面注销,那么Spring Security将WebSocket连接的URL保持为SavedRequest。
DEBUG savedrequest.HttpSessionRequestCache - DefaultSavedRequest added to Session: DefaultSavedRequest[http://localhost:8080/formx/formX/update]
DEBUG savedrequest.HttpSessionRequestCache - DefaultSavedRequest added to Session: DefaultSavedRequest[http://localhost:8080/formx/formX/notifications/?X-Atmosphere-Transport=close&X-Atmosphere-tracking-id=b5d8fde4-d950-41fd-9b49-02e06799a36f&conversationId=988080042]
日志中的第一个条目具有SavedRequest的正确值,但不知何故它被Atmosphere WebSocket连接覆盖。
我如何告诉Spring安全不使用大气WebSocket连接作为SavedRequest?
我想我可以使用一些大气协议特定的头来区分连接
在Java配置中,您可以设置RequestMatcher -然后它很容易。
在WebSecurityConfigurerAdapter:protected void configure(HttpSecurity http) {
HttpSessionRequestCache cache = new HttpSessionRequestCache(); //this one is used by default
cache.setRequestMatcher(AnyRequestMatcher.INSTANCE); //change the request matcher, so it do not match your Atmosphere requests
http.requestCache().requestCache(cache);
}