1

笔记

我有ServletFilter哪个用于检查用户是否已经登录,使用<url-pattern>. 如果用户未登录,则重定向到login.xhtml.

我的问题

用户登录后,我的程序总是重定向dashboard.xml(基于navigation-rule)。我想last visited page自动重定向。你能提供可能的方法吗?

目前我的解决方案正在为此工作

但是,我不乐意使用它。Seam支持吗?你能提供更好的方法吗?

在我的ServletFilter,我保持上次访问的页面如下

AuthenticationFilter.java

httpSession.setAttribute(Constants.ORIGINAL_VIEW_KEY, requestPath);

在我LoginBean的 , 在用户登录后重定向最后访问的页面。

登录Bean.java

ELContext elContext = facesContext.getELContext();
Application application = facesContext.getApplication();
ExpressionFactory eFactory = application.getExpressionFactory();
ValueExpression binding = eFactory.createValueExpression(elContext, "#{" + Constants.VISIT_KEY_SCOPE + Constants.VISIT_KEY + "}", Visit.class);
binding.setValue(elContext, visit);

ValueExpression originalViewBinding = eFactory.createValueExpression(elContext, "#{" + Constants.ORIGINAL_VIEW_SCOPE + Constants.ORIGINAL_VIEW_KEY + "}", String.class);

String originalViewId = (String) originalViewBinding.getValue(elContext); <--- last visited view id.

UIViewRoot viewRoot = application.getViewHandler().createView(facesContext, originalViewId) ;
facesContext.setViewRoot(viewRoot);
facesContext.renderResponse();
4

2 回答 2

0

从 login.page.xml 中删除以下内容

<navigation from-action="#{identity.login}">
  <rule if="#{identity.loggedIn}">
     <redirect view-id="/view/dashboard.xhtml"/>
  </rule>

于 2012-09-27T12:09:11.420 回答
0

如果使用Identityand Credentials,则在登录后页面自动重定向上次访问的页面(访问该页面,使用需要登录)。我们必须component.xml如下配置。

组件.xml

<?xml version="1.0" encoding="UTF-8"?>
<components ----->
   <event type="org.jboss.seam.security.loginSuccessful">
      <action execute="#{redirect.returnToCapturedView}"/>
   </event>
</components>   
于 2012-11-20T13:36:28.013 回答