3

我有一个战争文件(特别是gerrit.war),它期望容器(特别是码头)处理基本的 HTTP 身份验证并将该信息传递给 webapp。所以我无权访问代码或 web.xml 文件。

我按照这些说明使用退出码头配置将 gerrit 包装在一个领域中,但是当我访问基本 URL (/login/) 时,我收到 403 (Forbidden) 错误。我希望得到一个 401,它会提示我的浏览器要求提供凭据(不是吗?)

我可以发布我的文件,但我没有更改上面示例中的任何内容。让我知道它是否会有所帮助,但是..

4

1 回答 1

0

可能有很多方法可以发生这种情况。在我的情况下,它发生是因为我的约束没有角色集。此代码生成 403:

private void secureServlet(ServletContextHandler handler) {
    ConstraintSecurityHandler security = new ConstraintSecurityHandler();
    security.setRealmName(this.realm);
    security.setAuthenticator(new BasicAuthenticator());
    security.setLoginService(new WebLoginService(this.engine));

    Constraint constraint = new Constraint();
    constraint.setName(Constraint.__BASIC_AUTH);
    //constraint.setRoles(new String[]{"user"});
    constraint.setAuthenticate(true);

    ConstraintMapping mapping = new ConstraintMapping();
    mapping.setConstraint(constraint);
    mapping.setPathSpec("/*");

    security.addConstraintMapping(mapping);
    handler.setSecurityHandler(security);
}

在角色行中评论将提示码头以 401:s 代替。

于 2012-12-24T22:56:35.487 回答