从J2EE Security Forward获取原始网址

时间:2018-10-31 20:18:25

标签: jsf

我在PrimeFaces应用程序中使用了容器安全性(J2EE Security),但无法获取最初请求的URL。用户通过身份验证后,我想将他们引导回其原始请求。我在任何地方都找不到原始请求。

在Weblogic中配置了J2EE安全提供程序,并在Web 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>

在登录表单中,我在Bean内进行身份验证。想象这样一个简单的表格:

<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均为空。我在这里需要什么魔法?

1 个答案:

答案 0 :(得分:0)

对于Weblogic,请使用:

String targetUrl = (String) session.getAttribute("weblogic.formauth.targeturl");