Перенаправление другой страницы при загрузке страницы в Seam Framework

Я разрабатываю приложение Seam. Для вновь созданных пользователей существует специальный сценарий. Когда учетная запись пользователя создается администратором, он должен изменить пароль при первом входе в систему, поэтому я должен заставить пользователя изменить свой пароль. На каждой странице я должен контролировать, является ли его первый вход в систему или нет. Если это первый вход в систему, я должен перенаправить его на страницу смены пароля.

Мне не удалось реализовать эту проблему в Seam Framework.

У вас есть идеи по этому поводу?


person firstthumb    schedule 16.12.2010    source источник


Ответы (2)


У меня есть два предложения. Первый,

Создайте метод в bean-компоненте, который возвращает значение, если пользователь вошел в систему в первый раз. Затем в ваших страницах.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();

     }
}

Но вы можете использовать этот метод, если используете защиту шва.

person zinan.yumak    schedule 16.12.2010
comment
Первый выглядит хорошо, но он выполняется при каждом запросе, верно? - person firstthumb; 16.12.2010
comment
Подход наблюдателя небезопасен, пользователь может изменить URL-адрес и зайти на сайт без смены пароля. Не хочу пускать его без смены пароля. - person firstthumb; 17.12.2010
comment
Firstthumb, вы рассматриваете возможность использования ссылок активации вместо вашего сценария? Вы отправляете ссылку активации пользователю и отключаете ВХОД, пока пользователь не получит пароль. Так что никто никуда не может уйти. Но на этот раз вы должны проверить, вошел ли пользователь в систему или нет. С другой стороны, я не вижу разницы между проверкой входа пользователя в систему или входом в систему в первый раз. - person zinan.yumak; 17.12.2010

Вы можете реализовать фильтр и проверить там вновь созданных пользователей, а затем перенаправить их соответствующим образом. Предоставьте собственный шаблон 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>
person Nayan Wadekar    schedule 16.12.2010
comment
Это не очень хороший подход. Этот фильтр будет постоянно применяться ко всем запросам для всех пользователей. - person Shervin Asgari; 16.12.2010