我目前正在 Glassfish 上运行 JPA/EJB/JSF 应用程序,并使用安全 JDBC 领域进行身份验证。该领域运行得很好,满足了要求,直到客户要求对导航进行小的更改。
如今,如果您尝试访问受保护的页面,身份验证机制会将您重定向到 web.xml 中指定的登录页面。完美的!身份验证成功后,您将被重定向回您尝试访问的页面。很公平。然而,客户决定,每次成功验证后,用户都应该被重定向到主页,无论他/她之前尝试访问哪个页面。问题是,我们如何更改领域,以便在每次成功验证后重定向到固定页面?
你不能。容器管理的身份验证不允许进行细粒度的配置(这正是第三方身份验证框架(例如阿帕奇·希罗 http://shiro.apache.org and 春季安全 http://static.springsource.org/spring-security/site/ exist).
您最好的选择是将容器管理的登录替换为程序化登录 http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#login%28java.lang.String,%20java.lang.String%29。改变<form action="j_security_check">
by a <h:form>
它提交给这样的 JSF 操作方法
public void login() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
try {
request.login(username, password);
externalContext.redirect(homepageURL);
} catch (ServletException e) {
context.addMessage(null, new FacesMessage("Unknown login"));
}
}
也可以看看:
- 使用 j_security_check 在 Java EE / JSF 中执行用户身份验证 https://stackoverflow.com/questions/2206911/best-way-for-user-authentication-on-javaee-6-using-jsf-2-0/2207147#2207147
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)