Получить исходный URL-адрес от J2EE Security Forward - PullRequest
0 голосов
/ 31 октября 2018

Я использую безопасность контейнера (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. Какая магия мне здесь нужна?

1 Ответ

0 голосов
/ 01 ноября 2018

Для Weblogic используйте:

String targetUrl = (String) session.getAttribute("weblogic.formauth.targeturl");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...