Я использую безопасность контейнера (J2EE Security) в приложении PrimeFaces и не могу получить первоначально запрошенный URL. После аутентификации пользователя я хочу направить его обратно к исходному запросу. Я нигде не могу найти этот оригинальный запрос.
Поставщик J2EE-безопасности настроен в Weblogic, а проверка подлинности формы выполняется в веб-XML следующим образом:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>myrealm</realm-name>
<form-login-config>
<form-login-page>/faces/login.xhtml</form-login-page>
<form-error-page>/faces/unauthorized.xhtml</form-error-page>
</form-login-config>
</login-config>
В форме входа я делаю аутентификацию внутри бина. Представьте себе простую форму как таковую:
<h:form>
<p:inputText id="userName" value="#{userManager.userName}" />
<p:password id="password" value="#{userManager.password}"/>
<p:commandButton action="#{userManager.login()}" value="Login"/>
</h:form>
Login Bean будет выглядеть так:
@Named
@SessionScoped
public class UserManager implements Serializable {
private String userName;
private String password;
private String requestedURL;
@Inject
private HttpServletRequest request;
@PostConstruct
public void init() {
requestedURL = request.getHeader("Referer"); //this is null
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
String forwardRequestURI = (String)externalContext.getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI);
}
public void login() {
request.login(getUserName(), getPassword());
//if successful, redirect back to place they came from
}
}
И request.getHeader ("Referer"), и RequestDispatcher.FORWARD_REQUEST_URI имеют значение null. Какая магия мне здесь нужна?