3

我目前正在 Glassfish 上运行 JPA/EJB/JSF 应用程序,并使用安全 JDBC 领域进行身份验证。该领域运行良好,满足要求,直到客户要求对导航进行小幅更改。

今天,如果您尝试访问受保护的页面,身份验证机制会将您重定向到 web.xml 中指定的登录页面。完美的!身份验证成功后,您将被重定向回您尝试访问的页面。很公平。但是,客户决定在每次成功的身份验证后,无论他/她之前尝试访问哪个页面,都应该将用户重定向到主页。问题是,我们如何更改领域以便在每次成功验证后重定向到固定页面?

4

1 回答 1

3

你不能。容器管理的身份验证不允许这种细粒度的配置(这正是Apache ShiroSpring Security等第三方身份验证框架存在的原因)。

最好的办法是用程序登录替换容器管理登录。将提交给这样的 JSF 操作方法的<form action="j_security_check">by更改为<h:form>

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"));
    }
}

也可以看看:

于 2013-01-11T14:08:01.193 回答