在 Glassfish 上进行领域身份验证后重定向
Posted
技术标签:
【中文标题】在 Glassfish 上进行领域身份验证后重定向【英文标题】:Redirect after Realm authentication on Glassfish 【发布时间】:2012-12-26 02:40:18 【问题描述】:我目前正在 Glassfish 上运行 JPA/EJB/JSF 应用程序,并使用安全 JDBC 领域进行身份验证。该领域运行良好,满足要求,直到客户要求对导航进行小幅更改。
今天,如果您尝试访问受保护的页面,身份验证机制会将您重定向到 web.xml 中指定的登录页面。完美的!身份验证成功后,您将被重定向回您尝试访问的页面。很公平。但是,客户决定,在每次成功的身份验证后,无论他/她之前尝试访问哪个页面,都应该将用户重定向到主页。问题是,我们如何更改领域以便在每次成功验证后重定向到固定页面?
【问题讨论】:
【参考方案1】:你不能。容器管理的身份验证不允许这种细粒度的配置(这正是存在 Apache Shiro 和 Spring Security 等第 3 方身份验证框架的原因)。
最好的办法是用programmatic login 替换容器管理的登录。将<form action="j_security_check">
更改为<h:form>
,该<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"));
另见:
Performing user authentication in Java EE / JSF using j_security_check【讨论】:
以上是关于在 Glassfish 上进行领域身份验证后重定向的主要内容,如果未能解决你的问题,请参考以下文章
iOS Facebook SDK 在设备上进行身份验证后未重定向