【发布时间】:2010-12-16 06:59:43
【问题描述】:
我正在开发 Seam 应用程序。新创建的用户有一个特殊的场景。当用户帐户由管理员创建时,他应该在第一次登录时更改密码,所以我应该强制用户更改他的密码。在每个页面我都必须控制他是否第一次登录,如果是第一次登录我应该将他重定向到更改密码页面。
我无法在 Seam Framework 中成功实施此问题。
您对此有什么想法吗?
【问题讨论】:
我正在开发 Seam 应用程序。新创建的用户有一个特殊的场景。当用户帐户由管理员创建时,他应该在第一次登录时更改密码,所以我应该强制用户更改他的密码。在每个页面我都必须控制他是否第一次登录,如果是第一次登录我应该将他重定向到更改密码页面。
我无法在 Seam Framework 中成功实施此问题。
您对此有什么想法吗?
【问题讨论】:
我有两个建议。第一个,
在 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();
}
}
但如果您使用接缝安全,则可以使用此方法。
【讨论】:
您可以实施过滤器并在那里检查新创建的用户,然后可以适当地重定向它们。提供自定义 url-pattern 以相应地过滤请求。
<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>
【讨论】: