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