1

ノート

ServletFilter使用して、ユーザーがすでにログインしているかどうかを確認するために使用されるものがあります<url-pattern>。ユーザーがログインしていない場合は、 にリダイレクトされlogin.xhtmlます。

私の問題

ユーザーがログインした後、私のプログラムは常にdashboard.xml(に基づいてnavigation-rule) をリダイレクトします。last visited page自動的にリダイレクトしたい。そのための可能な方法を提供していただけますか?

現在、私のソリューションはそのための作業です

しかし、私はそれを使用することに満足していません。Seamサポートしますか?より良い方法を提供できますか?

私のServletFilterでは、最後にアクセスしたページを以下のように保持します

AuthenticationFilter.java

httpSession.setAttribute(Constants.ORIGINAL_VIEW_KEY, requestPath);

myLoginBeanで、ユーザーがログインした後に最後にアクセスしたページをリダイレクトします。

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

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>   
于 2012-11-20T13:36:28.013 に答える