我正在開發Seam應用程序。新創建的用戶有一個特殊的場景。當用戶帳戶由admin創建時,他應該在首次登錄時更改密碼,以便強制用戶更改密碼。在每個頁面中,我必須控制他是否首次登錄,如果是首次登錄,我應該重定向他以更改密碼頁面。在Seam Framework中加載頁面時重定向另一個頁面
我不能在Seam Framework中成功實現這個問題。
你有什麼想法嗎?
我正在開發Seam應用程序。新創建的用戶有一個特殊的場景。當用戶帳戶由admin創建時,他應該在首次登錄時更改密碼,以便強制用戶更改密碼。在每個頁面中,我必須控制他是否首次登錄,如果是首次登錄,我應該重定向他以更改密碼頁面。在Seam Framework中加載頁面時重定向另一個頁面
我不能在Seam Framework中成功實現這個問題。
你有什麼想法嗎?
你可以實現一個過濾器&可以檢查那裏的新創建的用戶&然後可以適當地重定向他們。提供自定義url模式以相應地過濾請求。
<filter>
<filter-name>Seam Filter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Seam Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我有兩個建議。第一個,
在bean中創建一個方法,如果用戶第一次登錄,則返回該方法。然後在你的pages.xml中,
<page view-id="*">
.
.
<navigation from-action="#{identityBean.isFirstLogin()}">
<rule if-outcome="true">
<redirect view-id="/changePasswordPage.xhtml"/>
</rule>
</navigation>
</page>
第二個是使用 'org.jboss.seam.security.loginSuccessful' 事件。
@Observer("org.jboss.seam.security.loginSuccessful")
public void redirectUserToChangePassword() {
if (isFirstLogin()) {
Redirect redirect = Redirect.instance();
redirect.setViewId("/changePassword.xhtml");
redirect.execute();
}
}
但是,如果您使用接縫安全性,則可以使用此方法。
+1對於觀察者方法 – 2010-12-16 09:06:07
第一個看起來不錯,但它在每個請求中運行,沒錯? – firstthumb 2010-12-16 14:02:04
是的,沒錯。 – 2010-12-16 15:54:04
這不是一個好方法。此過濾器將一直適用於所有用戶的所有請求。 – 2010-12-16 09:05:49