在 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 在设备上进行身份验证后未重定向

身份验证后重定向期间请求挂起

KeyCloak 在身份验证代码流错误后重定向回身份提供者

强制 Shibboleth 在身份验证后重定向到特定 URL

如何在通过 Redux 操作进行身份验证后重定向用户?

在 Laravel 5 中进行身份验证后重定向