2011-11-08 30 views
7

Tôi có triển khai nhúng Jetty 7 đang chạy dưới dạng dịch vụ và muốn thêm xác thực cơ bản không có tệp web.xml cho servlet.Xác thực cơ bản với máy chủ Jetty 7 được nhúng và không có tệp web.xml

Tôi tạo ra thông tin của tôi bằng cách sử dụng bước được mô tả here

Tôi nghĩ rằng tôi có thể tạo ra các máy chủ, tạo một handler an ninh với xác thực cơ bản và đính kèm một HashLoginService để quản lý bảo mật. Nhưng tôi rõ ràng thiếu một số điều vì tôi không bao giờ nhận được nhắc nhở cho các thông tin.

Dưới đây là mã. Mọi sự trợ giúp sẽ rất được trân trọng.

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

Trả lời

11

tôi đã làm việc này và đăng một mẫu webapp here

+0

Cảm ơn, tác phẩm mẫu. – ozhan

0

Mã trông hoàn toàn ổn. giao diện của tôi là hơi khác nhau cho thêm ConstraintMapping như CM add đơn dường như đã biến mất trong phiên bản của tôi về cầu cảng 7.

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

Bar rằng mã của tôi về cơ bản là giống hệt nhau và làm việc cho tôi.

Lưu ý rằng một khi chứng thực trình duyệt của bạn sẽ không nhắc bạn một lần nữa, trừ khi bạn khởi động lại trình duyệt của bạn hoặc làm theo hướng dẫn here

Các vấn đề liên quan