我在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均为空。我在这里需要什么魔法?
答案 0 :(得分:0)
对于Weblogic,请使用:
String targetUrl = (String) session.getAttribute("weblogic.formauth.targeturl");