首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Spring Security中重定向在会话超时时处理PrimeFaces Ajax请求

在Spring Security中重定向在会话超时时处理PrimeFaces Ajax请求
EN

Stack Overflow用户
提问于 2013-05-31 13:06:16
回答 1查看 9.8K关注 0票数 4

我正在尝试让JSF web前端在会话超时时重定向回登录页面(在Spring Security中)。

我尝试过使用元刷新方法,但是这会导致一个不受欢迎的副作用,即当页面上只使用AJAX控件时,元刷新时间将不会更新。这意味着页面可能会在您仍在使用时刷新,因为您没有转换到另一个页面,而只是对服务器进行了AJAX调用。我还没有找到一种使用Primefaces轻松改变这种行为的方法。

当会话过期时,Spring Security会向Primefaces返回一个302 HTTP错误消息,但是Primefaces会忽略重定向请求。您可以判断会话何时过期,因为Primefaces控件停止响应,因为它们的AJAX调用不成功。

我使用的是在Glassfish 3.1.2.2上运行的Primefaces 3.4.2和Spring Security 3.1.4。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-04 08:35:16

这是Spring Security将重定向发送回客户端的默认方式的一个问题。向客户端发送重定向的默认方法是发送302临时移动的响应的HTML方法,但是这不适用于AJAX客户端。AJAX客户端会将其解释为重定向到新位置以发布/获取数据,而不是页面重定向。让AJAX客户机用与普通HTML请求相同的方式将浏览器重定向到新页面的正确方法是:

代码语言:javascript
运行
AI代码解释
复制
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<partial-response>
  <redirect url="http://your.url.here/"></redirect>
</partial-response>

要覆盖Spring Security使用的默认无效会话策略,您需要在Spring配置中创建一个SessionManagementFilter bean,并将实现InvalidSessionStrategy的类传递给它,并在通过HTML或AJAX收到请求时发送正确的重定向响应:

代码语言:javascript
运行
AI代码解释
复制
<bean id="sessionManagementFilter" class="org.springframework.security.web.session.SessionManagementFilter">
  <constructor-arg name="securityContextRepository" ref="httpSessionSecurityContextRepository" />
  <property name="invalidSessionStrategy">
    <bean class="yourpackage.JsfRedirectStrategy">
       <constructor-arg name="invalidSessionUrl" value="/your_session_expired_page.xhtml" />
    </bean>
  </property>
</bean>
<bean id="httpSessionSecurityContextRepository" class="org.springframework.security.web.context.HttpSessionSecurityContextRepository"/>

然后,您需要将此过滤器添加到Spring Security HTTP块:

代码语言:javascript
运行
AI代码解释
复制
<security:http use-expressions="true">
    <security:custom-filter ref="sessionManagementFilter" before="SESSION_MANAGEMENT_FILTER" />
    ...
</security:http>

现在将在应用程序启动时创建自定义会话管理筛选器,并且只要发现过期会话,就会执行所提供的无效会话策略类。

有关如何实现无效会话策略的一个很好的示例可以在这里找到:https://gist.github.com/banterCZ/5160269

在这里可以找到一个使用IceFaces的类似问题:JSF 2, Spring Security 3.x and Richfaces 4 redirect to login page on session time out for ajax requests

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16858017

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文