Я тестирую веб-приложение (.war), работающее на Jetty 7. В демонстрационных целях я хочу запустить его на общедоступном URL-адресе, однако я бы не хотел, чтобы весь мир (если он случайно наткнулся на URL-адрес) мог вижу это.
Есть ли способ заставить Jetty требовать аутентификации типа basic-auth при доступе к веб-приложению (без изменения чего-либо внутри войны, то есть без изменений в файле web.xml)? Или, если не веб-приложение, то какую-либо часть того, что Jetty предоставляет на порт 8080?
Взгляните на полный пример здесь:
Выше ссылка на веб-архив, исходная ссылка теперь недоступна:
Пример программной конфигурации из приведенного выше:
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();