【问题标题】:Redirecting another page when the page loading in Seam Framework在 Seam Framework 中加载页面时重定向另一个页面
【发布时间】:2010-12-16 06:59:43
【问题描述】:

我正在开发 Seam 应用程序。新创建的用户有一个特殊的场景。当用户帐户由管理员创建时,他应该在第一次登录时更改密码,所以我应该强制用户更改他的密码。在每个页面我都必须控制他是否第一次登录,如果是第一次登录我应该将他重定向到更改密码页面。

我无法在 Seam Framework 中成功实施此问题。

您对此有什么想法吗?

【问题讨论】:

    标签: security jsf seam seam2


    【解决方案1】:

    我有两个建议。第一个,

    在 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 并在不更改密码的情况下进入站点。我不想让他不改密码就进去。
    • Firstthumb,您是否考虑使用激活链接而不是您的方案?您向用户发送激活链接并禁用登录,直到用户获得密码。所以没有人可以无处可去。但是这次你必须检查用户是否登录。另一方面,我认为检查用户是否登录或首次登录之间没有区别。
    【解决方案2】:

    您可以实施过滤器并在那里检查新创建的用户,然后可以适当地重定向它们。提供自定义 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>
    

    【讨论】:

    • 这不是一个好方法。此过滤器将始终应用于所有用户的所有请求。
    猜你喜欢
    • 2020-04-08
    • 2017-06-08
    • 2016-01-20
    • 2016-11-17
    • 2021-06-24
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多