2010-12-16 60 views
0

我正在开发Seam应用程序。新创建的用户有一个特殊的场景。当用户帐户由admin创建时,他应该在首次登录时更改密码,以便强制用户更改密码。在每个页面中,我必须控制他是否首次登录,如果是首次登录,我应该重定向他以更改密码页面。在Seam Framework中加载页面时重定向另一个页面

我不能在Seam Framework中成功实现这个问题。

你有什么想法吗?

回答

0

你可以实现一个过滤器&可以检查那里的新创建的用户&然后可以适当地重定向他们。提供自定义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> 
+1

这不是一个好方法。此过滤器将一直适用于所有用户的所有请求。 – 2010-12-16 09:05:49

4

我有两个建议。第一个,

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

    } 
} 

但是,如果您使用接缝安全性,则可以使用此方法。

+0

+1对于观察者方法 – 2010-12-16 09:06:07

+0

第一个看起来不错,但它在每个请求中运行,没错? – firstthumb 2010-12-16 14:02:04

+0

是的,没错。 – 2010-12-16 15:54:04

相关问题