当前位置: 首页 > news >正文

嘉兴网站推广安庆做网站公司

嘉兴网站推广,安庆做网站公司,北京高端网站定制公司,四川住房和城乡建设九大员网站JSF AJAX请求的会话超时处理 当我们使用AJAX行为开发JSF应用程序时#xff0c;在处理Ajax请求超时场景时可能会遇到问题。 例如#xff0c;如果您使用的是基于J2EE表单的身份验证#xff0c;则会话超时后应将正常请求重定向到登录页面。 但是#xff0c;如果您的请求是AJAX… JSF AJAX请求的会话超时处理 当我们使用AJAX行为开发JSF应用程序时在处理Ajax请求超时场景时可能会遇到问题。 例如如果您使用的是基于J2EE表单的身份验证则会话超时后应将正常请求重定向到登录页面。 但是如果您的请求是AJAX则无法在客户端正确处理响应。 用户将保留在同一页面上并且不知道会话已过期。 许多人为此问题提出了解决方案。 以下是涉及使用Spring安全框架的两种可能的解决方案 1. Oleg Varaksin的帖子 2. Spring Security 3和ICEfaces 3教程 但是某些应用程序可能只是使用简单的机制将其身份验证和授权信息存储在会话中。 对于那些不使用Spring Security框架的应用程序他们如何处理此类问题 我刚刚修改了Oleg Varaksin提出的解决方案作为我的参考。 首先创建一个名为“ MyJsfAjaxTimeoutSetting”的简单会话范围内的JSF托管bean。 该POJO的主要目的只是允许您在faces-config.xml中的会话超时后配置重定向URL。 如果您不希望配置超时URL则可能不需要此类。 public class MyJsfAjaxTimeoutSetting {public MyJsfAjaxTimeoutSetting() {}private String timeoutUrl;public String getTimeoutUrl() {return timeoutUrl;}public void setTimeoutUrl(String timeoutUrl) {this.timeoutUrl timeoutUrl;}} 其次创建一个PhaseListener来处理Ajax请求的重定向。 此PhaseListener是解决方案中最重要的部分。 它重新创建响应以便超时后可以重定向Ajax请求。 import org.borislam.util.FacesUtil; import org.borislam.util.SecurityUtil; import java.io.IOException; import javax.faces.FacesException; import javax.faces.FactoryFinder; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.event.PhaseEvent; import javax.faces.event.PhaseId; import javax.faces.event.PhaseListener; import javax.faces.render.RenderKit; import javax.faces.render.RenderKitFactory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.primefaces.context.RequestContext;public class MyJsfAjaxTimeoutPhaseListener implements PhaseListener {public void afterPhase(PhaseEvent event){}public void beforePhase(PhaseEvent event){ MyJsfAjaxTimeoutSetting timeoutSetting (MyJsfAjaxTimeoutSetting)FacesUtil.getManagedBean(MyJsfAjaxTimeoutSetting);FacesContext fc FacesContext.getCurrentInstance();RequestContext rc RequestContext.getCurrentInstance();ExternalContext ec fc.getExternalContext();HttpServletResponse response (HttpServletResponse) ec.getResponse();HttpServletRequest request (HttpServletRequest) ec.getRequest();if (timeoutSetting null) {System.out.println(JSF Ajax Timeout Setting is not configured. Do Nothing!);return ;}UserCredential user SecurityUtil.getUserCredential(); //// You can replace the above line of code with the security control of your application.// For example , you may get the authenticated user object from session or threadlocal storage.// It depends on your design.if (usernull) {// user credential not found. // considered to be a Timeout caseif (ec.isResponseCommitted()) {// redirect is not possiblereturn;}try{if ( ( (rc!null RequestContext.getCurrentInstance().isAjaxRequest())|| (fc!null fc.getPartialViewContext().isPartialRequest())) fc.getResponseWriter() null fc.getRenderKit() null) {response.setCharacterEncoding(request.getCharacterEncoding());RenderKitFactory factory (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);RenderKit renderKit factory.getRenderKit(fc,fc.getApplication().getViewHandler().calculateRenderKitId(fc));ResponseWriter responseWriter renderKit.createResponseWriter(response.getWriter(), null, request.getCharacterEncoding());fc.setResponseWriter(responseWriter);ec.redirect(ec.getRequestContextPath() (timeoutSetting.getTimeoutUrl() ! null ? timeoutSetting.getTimeoutUrl() : )); }} catch (IOException e) {System.out.println(Redirect to the specified page timeoutSetting.getTimeoutUrl() failed);throw new FacesException(e);}} else {return ; //This is not a timeout case . Do nothing !}}public PhaseId getPhaseId(){return PhaseId.RESTORE_VIEW;}} FacesUtil.getManagedBeanMyJsfAjaxTimeoutSetting的详细信息如下所示 public static Object getManagedBean(String beanName) {FacesContext fc FacesContext.getCurrentInstance();ELContext elc fc.getELContext();ExpressionFactory ef fc.getApplication().getExpressionFactory();ValueExpression ve ef.createValueExpression(elc, getJsfEl(beanName), Object.class);return ve.getValue(elc); } 组态 如前所述会话作用域受管bean MyJsfAjaxTimeoutSetting的目的只是为了使您可以在faces-config.xml中配置timeoutUrl。 managed-bean managed-bean-nameMyJsfAjaxTimeoutSetting/managed-bean-name managed-bean-classorg.borislam.security.MyJsfAjaxTimeoutSetting/managed-bean-class managed-bean-scopesession/managed-bean-scope managed-property property-nametimeoutUrl/property-name value/login.do/value /managed-property /managed-bean 最重要的是将PhaseListener添加到faces-config.xml中。 lifecycle phase-listener idJSFAjaxTimeoutPhaseListenerhk.edu.hkeaa.infrastructure.security.JSFAjaxTimeoutPhaseListener /phase-listener /lifecycle 如果您使用的是Spring框架则可以在SpringBeanFacesELResolver的帮助下在Spring中管理MyJsfAjaxTimeoutSetting。 然后您可以使用以下配置。 bean idMyJsfAjaxTimeoutSetting classorg.borislam.security.MyJsfAjaxTimeoutSetting scopesession property nametimeoutUrl value/login.do 参考 “ 编程和平”博客上JCG合作伙伴 Boris Lam 对JSF AJAX请求的会话超时处理 。 翻译自: https://www.javacodegeeks.com/2012/12/session-timeout-handling-on-jsf-ajax-request.html
http://www.zqtcl.cn/news/97801/

相关文章:

  • 福永网站建设公司如何利用个人nas做网站
  • 北京网站seo外包wordpress心情
  • 租用服务器一般是谁帮助维护网站安全网站如何看是哪家公司做的
  • 戴尔网站建设的特点开创者wordpress素材
  • 网站假设公司排名不用囤货
  • 有关网站建设合同织梦珠宝网站模板
  • 月牙河做网站公司电商网站开发成本
  • iis7建立网站注册公司地址虚拟地址怎么申请
  • 响应式网站开发的想要去国外网站买东西怎么做
  • 网站建设开发有什么好处百度网盘0基础网站开发教程
  • 桂林整站优化青岛网站制作哪里有
  • 织梦cms手机网站源码天天想你视频免费观看西瓜
  • 怎么做网站弄网盟邯郸超速云_网站建设
  • 桂阳做网站的软件定制开发外包wordpress电子商务插件
  • 10有免费建网站那些公司做网站比较厉害
  • 网站关键词优化推广旅游类网站开发开题报告范文
  • 官方网站营销拟在建项目信息网官网
  • 沈阳做微信和网站的公司湛江网站建设公司哪家好
  • 网站 开发逻辑电话销售电销系统
  • 有哪些做兼职的设计网站有哪些工作可以用asp做哪些网站
  • 装修网站推广方案东莞网站建设0086
  • 知名营销网站开发高端网站建设如何收费
  • 佛山网站建设邓先生沈阳做网站找黑酷科技
  • 网站建设 排名下拉请教个人主页网站怎么做啊
  • 揭阳网站制作教程安阳seo公司
  • 网站运营管理教材wordpress 评论框插件
  • 免费做手机网站有哪些网页怎么制作链接
  • 浙江省建设工程质量协会网站wordpress只在首页设置关键词
  • 网站开发选题申请理由东莞网站建议
  • 阿里巴巴国际站运营培训商务网站的建设步骤