0

在我的 web.xml 中有这个:

<security-constraint>
        <display-name>Amministrazione</display-name>
        <web-resource-collection>
            <web-resource-name>wrcollAdmin</web-resource-name>
            <description/>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.htm</form-login-page>
            <form-error-page>/login.htm</form-error-page>
        </form-login-config>
    </login-config>

允许我保护我的 webapp 的安全区域。

例如,我被重定向到 /login.htm 试图访问 /admin/page.htm 。

然后我有一个 JSF2 表单,其中包含用户名和密码的输入字段。登录按钮触发控制器中的“login()”方法,例如:

public void login() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();
    ExternalContext externalContext = context.getExternalContext();
    // HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();

    logged = false;
    // request.login(username, password);

    if ( users.get(username)!= null && users.get(username).equals(password) ) {
        logged = true;
        externalContext.redirect("/admin/");
    } else {
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Failed","Error"));
     }
}

现在这显然行不通,因为我不知道如何告诉 Java EE:“嘿!我告诉你这个用户是有效的!只要……让他登录!”

我想 API 只支持 request.login() 但我不想使用 MemoryRealm、JDBCRealm 等等......我确定用户有效性的其他方式!

如果无法以编程方式登录用户,最好的解决方法是什么?也许使用单个用户名+密码对创建一个领域并始终将它们用于 request.login()?

4

1 回答 1

0

您可以为此使用 JASPIC 身份验证模块。这样的模块可以是您应用程序的一部分,您可以将所有应用程序特定的逻辑移动到那里以验证用户。

或者...您可以创建一个特殊的身份验证模块,该模块只登录您传递给它的任何用户。在这样的模块中确实有一种方法可以说:“只需登录这个用户”。(这是 CallerPrincipalCallback)

于 2013-08-27T17:28:25.430 回答