使用登录登录页面后,JBoss Seam能否重定向用户的“上次访问页面”?

时间:2012-09-27 08:27:15

标签: java jsf seam

注意

我有ServletFilter,用于检查用户是否已使用<url-pattern>进行了记录。如果用户未登录,则重定向到login.xhtml

我的问题

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

目前我的解决方案适用于

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

在我的ServletFilter中,我保留上次访问过的页面,如下所示

AuthenticationFilter.java

httpSession.setAttribute(Constants.ORIGINAL_VIEW_KEY, requestPath);

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

LoginBean.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();

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果使用IdentityCredentials,则页面会在记录后自动重定向上次访问的页面(访问页面,使用需要登录)。我们必须在component.xml中进行配置,如下所示。

component.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<components ----->
   <event type="org.jboss.seam.security.loginSuccessful">
      <action execute="#{redirect.returnToCapturedView}"/>
   </event>
</components>