1

我一直在试验这个问题的实质(JSF / Java EE login without required a protected resource)。

如果我使用 BASIC 身份验证设置示例应用程序,其中包含一个公共页面 (/public.xhtml) 和一个受保护页面 (/protected/private.xhtml),并且我有一个从第一页到第二页的链接(如图所示下面),一切正常。

<h:commandButton value="Go Private" action="/protected/private?faces-redirect=true" />


但是,如果我删除login-config并将上面的按钮替换为:

<h:commandButton value="Go Private" action="#{mybean.login}" />


...和 ​​#{mybean.login} 看起来像这样...

public String login() {
    HttpServletRequest request = ...
    try {
        request.login("known username", "known password");
    } catch (Exception e) {
        // handle unknown credentials
    }
    return "/protected/private?faces-redirect=true";
}


在这种情况下,登录成功(不例外request.login()),但浏览器显示“禁止资源”页面。


任何人都可以阐明这两种情况之间的区别吗?

4

2 回答 2

0

HttpServletRequest#login()编程登录仅适用于基于身份验证的FORM配置。删除<login-config>将使其默认为BASIC,因此login()永远不会工作。基本上在会话中login()设置用户,但是BASIC身份验证基本上检查AuthenticateHTTP 请求标头,而不是会话。

把它放<login-config>回去,FORM如果你想使用login().

于 2012-12-05T11:17:28.030 回答
-1

在哪儿:

<h:commandButton value="Go Private" action="#{mybean.login}" /> 

它应该是:

<h:commandButton value="Go Private" action="#{mybean.login()}" />

如果你想使用登录方法。

但也许你的 mybean 也有

String private login;
public String getLogin(){ return this.login ;}

并且您已经为 var 加载了所需的响应。

于 2014-09-12T09:19:07.730 回答