嵌入式Jetty 7服务器的基本身份验证,没有web.xml文件

时间:2011-11-08 20:45:01

标签: jetty basic-authentication

我有一个作为服务运行的Jetty 7的嵌入式实现,并希望为servlet添加没有web.xml文件的基本身份验证。

我使用here

描述的步骤创建了我的凭据

我认为我可以创建服务器,使用基本身份验证创建安全处理程序并将HashLoginService附加到安全管理器。但我显然遗漏了几件事,因为我从来没有得到凭证的提示。

以下是代码。任何帮助将不胜感激。

    server = new Server(port);
    server.addConnector(getSslChannelConnector(securePort));
    server.setGracefulShutdown(1000);
    server.setStopAtShutdown(true);

    // create the context handler for the server
    ServletContextHandler sch = new ServletContextHandler(server, WEBAPP_CONTEXT);

    // attach the security handler to it that has basic authentication
    sch.setSecurityHandler(getSecurityHandler());

    // define the processing servlet.
    sch.addServlet(new ServletHolder(new ProcessingServlet()), "/process");

    .
    .
private SecurityHandler getSecurityHandler() {

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

    // map the security constraint to the root path.
    ConstraintMapping cm = new ConstraintMapping();
    cm.setConstraint(constraint);
    cm.setPathSpec("/*");

    // create the security handler, set the authentication to Basic
    // and assign the realm.
    ConstraintSecurityHandler csh = new ConstraintSecurityHandler();
    csh.setAuthenticator(new BasicAuthenticator());
    csh.setRealmName(REALM);
    csh.addConstraintMapping(cm);

    // set the login service
    csh.setLoginService(getHashLoginService());

    return csh;

}
private HashLoginService getHashLoginService() {

    // create the login service, assign the realm and read the user credentials
    // from the file /tmp/realm.properties.
    HashLoginService hls = new HashLoginService();
    hls.setName(REALM);
    hls.setConfig("/tmp/realm.properties");
    hls.setRefreshInterval(0);
    return hls;
}

2 个答案:

答案 0 :(得分:11)

我完成了这项工作并发布了一个示例webapp here

答案 1 :(得分:0)

代码看起来很普通。 我的界面与添加ConstraintMapping略有不同,因为单个CM添加似乎已经出现在我的jetty 7版本中。

securityHandler.setConstraintMappings(new ConstraintMapping[] {cm});

请注意我的代码基本相同并且对我有效。

请注意,一旦通过身份验证,您的浏览器就不会再次提示您,除非您重新启动浏览器或按照说明here