2012-09-27 52 views
1

注意在使用登錄登錄頁面後,JBoss Seam是否可以重定向用戶的「上次訪問頁面」?

我有ServletFilter這是用來檢查用戶是否已經登錄或不使用<url-pattern>。如果用戶未登錄,則重定向到login.xhtml

我的問題

用戶登錄後,我的程序總是被重定向dashboard.xml(基於navigation-rule)。我想自動重定向last visited page。你能爲此提供可能的途徑嗎?

目前我Soluction是針對

工作,但是,我不開心使用它。 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(); 

回答

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> 
0

移除login.page.xml

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

+0

我的問題是最後訪問的網頁 – CycDemo

+0

你想要用戶返回到網頁上,他是他最後一次在網站上? Seam默認不提供該功能,您應該添加一個全局頁面操作,該操作存儲(例如在數據庫上)當前頁面的視圖ID,然後在登錄時將其重定向到該視圖,檢查源代碼**重定向**組件的線索如何重定向 – AndresQ

相關問題