关于java:Jetty中的密码保护应用程序

关于java:Jetty中的密码保护应用程序

我正在测试在 Jetty 7 中运行的 web 应用程序 (.war)。出于演示目的,我想在公共 URL 上运行它,但我不希望全世界(如果他们碰巧遇到该 URL)都能看到它。

有没有办法让 Jetty 在访问 webapp 时要求进行 basic-auth 类型的身份验证(无需修改 war 中的任何内容,即无需编辑 web.xml 文件)?或者,如果不是 webapp,那么 Jetty 在端口 8080 提供的任何部分?

答案1

查看此处的完整示例:

以上为网页存档链接,原链接现已不可用:

上面的程序配置示例:

import org.mortbay.jetty.security.*;

Server server = new Server();

Connector connector = new SelectChannelConnector();
connector.setPort(8080);
server.setConnectors(new Connector[]{connector});

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

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

SecurityHandler sh = new SecurityHandler();
sh.setUserRealm(new HashUserRealm("MyRealm",System.getProperty("jetty.home")+"/etc/realm.properties"));
sh.setConstraintMappings(new ConstraintMapping[]{cm});

WebAppContext webappcontext = new WebAppContext();
webappcontext.setContextPath("/mywebapp");
webappcontext.setWar("./path/to/my/war/orExplodedwar");
webappcontext.addHandler(sh);

HandlerCollection handlers= new HandlerCollection();
handlers.setHandlers(new Handler[]{webappcontext, new DefaultHandler()});

server.setHandler(handlers);
server.start();
server.join();

相关内容