JSF 2.2 & Аутентификация: условие перенаправления

1

ПРИМЕЧАНИЕ. Пользователь в этих сценариях уже имеет учетную запись. Я использую Java EE 7: JSF 2.2, GLassfish 4.1 и исходящую аутентификацию. Цель: когда вход в систему (вход в систему) в первый раз я хочу перенаправить на страницу (например): a.xhtml, чтобы он ввел некоторую информацию. после этого каждый раз, когда он войдет в систему, будет redierct на страницу: normal.xhtml и NOT a.xhtml. как вы можете видеть в следующем коде после входа в систему, он всегда будет перенаправлен на a.xhtml, и это проблема:

<security-constraint>
    <display-name>securityConstraint1</display-name>
    <web-resource-collection>
      <web-resource-name>resources</web-resource-name>
      <description></description>
      <url-pattern>/private/* </url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>Admin</role-name>
    </auth-constraint>

    </security-constraint>
      <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>ProjRealm</realm-name>
        <form-login-config>
          <form-login-page>/login.xhtml</form-login-page>
          <form-error-page>/public/pages/forbidden.xhtml</form-error-page>
        </form-login-config>
      </login-config>
      <security-role>
        <role-name>Admin</role-name>
      </security-role>
      <welcome-file-list>
        <welcome-file>private/inscription/a.xhtml</welcome-file>
      </welcome-file-list>

Второй вопрос: когда я посетил страницу проекта по умолчанию: http://localhost:8080/Pro1.0/ сервер хочет перенаправить меня на защищенный файл a.xhtml, и поскольку пользователь не прошел проверку подлинности, сервер перенаправляет меня на "form-login-page", объявленная в web.xml, мой вопрос заключается в том, как я могу заставить сервер перенаправить "страницу проекта по умолчанию" на общедоступную страницу (домашнюю страницу, такую как любой веб-сайт), и перенаправить пользователя при аутентификации на приватную страницу, например normal.xhtml, как было задано в первом вопросе. Спасибо, и если у вас есть вопрос, я здесь.

ОБНОВЛЕНИЕ: Спасибо Oskars Pakers за решение

вот моя реализация: web.xml:

<welcome-file-list>
    <welcome-file>redirect.xhtml</welcome-file>
  </welcome-file-list>

redirect.xhtml:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/html">
<f:metadata>
    <f:viewAction action="#{redirect.testUser}"></f:viewAction>
</f:metadata>
<h:head>
</h:head>
<h:body>
    <h1>TEST Redirect</h1>
</h:body>
</html>

Redirect.java:

@Named
@RequestScoped
public class Redirect extends BaseBacking {

private static final String AAA = "/private/inscription/aaa.xhtml?faces-redirect=true";
private static final String NORMAL = "/private/sections/normal.xhtml?faces-redirect=true";
private static final String HOME = "/home.xhtml?faces-redirect=true";

@EJB
private EJBClass EJBClass;

public String testUser() {
    Principal user = getRequest().getUserPrincipal();
    if (user == null) {
        return HOME;
    }
    BigInteger Id = /*here I call a EJBClass method so I can decide is it the first time the user login OR NOT*/(user.getName());
    if (Id == null) {
        return AAA;
    } else {
        return NORMAL;
    }
}
}
Теги:
redirect
jsf
jsf-2.2
java-ee-7

1 ответ

0
Лучший ответ

1-й вопрос
Здесь я вижу два варианта.

  1. Вы можете проверить на странице a.xhtml, что пользователь был там (и вводил информацию) и перенаправил его на normal.xhtml
  2. Вы можете переключиться на программный вход в систему, создать пользовательскую страницу jsf и выполнить метод вспомогательных компонентов, аналогичный этому

    Строка login() {HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance(). GetExternalContext(). GetRequest(); request.login(username,password); request.login (имя пользователя, пароль); //check if user has been in a.xhtml return "a.xhtml";//проверяем, был ли пользователь в a.xhtml return "a.xhtml"; //or return "normal.xhtml" }//или возвращаем "normal.xhtml"}

Второй вопрос

Как и в первом вопросе, вы должны проверить свою общедоступную страницу, если пользователь зарегистрирован и перенаправлен на свою страницу. Поскольку вы используете JSF 2.2. ты видел

<f:viewAction

тег? Он выводит метод при входе на страницу. Вы можете вернуть результат, если хотите перенаправить пользователя.
См. F: viewAction

Ещё вопросы

Сообщество Overcoder
Наверх
Меню