Я хочу программно реализовать базовую аутентификацию для сервера Jetty, как показано на рисунке here. Ради удобства, я здесь^C-^V'ing этот фрагмент.Обычная проверка подлинности с помощью Camel Jetty
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();
Теперь проблема в том, что вышеупомянутый подход требует наличия дескриптора сервера. Однако в моем случае, поскольку я использую Camel, у меня нет прямого доступа к серверу. Так определяется мой трубопровод:
from("jetty:http://localhost:8080/documents_in?matchOnUriPrefix=true").
process(new MyProcessor());
Как адаптировать связанное решение для аутентификации к моему делу? Или мне нужно следовать совсем другому методу?
Обратите внимание, что я являюсь как новичком верблюда, так и новичком. Любая помощь будет оценена. Благодарю.
Добавление:
This page показывает, как сделать это с Spring XML, однако мы не используем Spring, так что это не имеет смысла для нас.
Спасибо, Роман за это. Это нормально, если я использовал ваш код для тестирования моей функциональности на верблюде? У меня запущена среда, в которой исходящие HTTP-вызовы выполняются с помощью camel-http. Поскольку мы планируем перейти на верблюд-http4, я хотел бы иметь достаточные тестовые примеры нашей реальной живой среды. В тестовых случаях я принимаю Jetty с Basic Auth (используя ваш код) и запускаю исходящие вызовы в тестовом примере. Дайте мне знать, если у вас есть какая-либо оговорка в использовании вашего кода. – Robin
@Robin Не стесняйтесь использовать код, как вам нравится. В то время, когда я опубликовал код, SO сохранила лицензию CC-BY-SA на должности, но теперь изменилась на [лицензию MIT] (http://meta.stackexchange.com/questions/271080/the-mit-license-clarity- на использовании-кода-на-стека переполнение-и-стек-обмен). Поэтому я рассматриваю все мои старшие должности также как MIT (не уверен, что я даже имею право делать это на самом деле ^^) –
Большое спасибо. Я добавил лицензию MIT (хотя код предназначен только для тестирования). Кроме того, ваш код дал идею даже иметь службу входа в систему для проверки сертификатов X509 с использованием библиотеки Jetty :: JAAS. Посмотрим, смогу ли я работать с Camel Jetty. – Robin