我想以编程方式实现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();
现在的问题是,上述方法需要你有一个处理服务器。但在我的情况下,因为我使用骆驼,我没有直接访问服务器。这是我的管道是如何定义的:
from("jetty:http://localhost:8080/documents_in?matchOnUriPrefix=true").
process(new MyProcessor());
如何适应链接的身份验证解决方案,以我的情况?还是我必须遵循一些完全不同的方法?
请注意,我是骆驼和码头新手。任何帮助将不胜感激。谢谢。
附录:
This page展示了如何使用Spring XML做到这一点,但我们不使用Spring,所以这是没有用的我们。
感谢罗马分享这个。如果我使用您的代码来测试我的骆驼http功能,可以吗?我有运行使用camel-http进行出站HTTP调用的环境。当我们计划迁移到camel-http4时,我希望有足够的测试案例来体验真实的现场环境。对于测试用例,我使用基本身份验证(使用您的代码)托管Jetty,并在测试用例中运行我们的出站呼叫。如果您在使用代码时有任何保留,请告诉我们。 – Robin 2017-01-10 18:07:56
@Robin随意使用代码,只要你喜欢。当我发布代码时,SO在帖子上保留了CC-BY-SA许可证,但现在更改为[MIT许可证](http://meta.stackexchange.com/questions/271080/the-mit-license-clarity-上使用码-上堆栈上溢和堆栈交换)。因此,我认为我所有的旧帖子也是麻省理工学院(不知道我是否有权这样做^^) – 2017-01-10 19:01:24
非常感谢。我已经添加了MIT许可证(即使代码仅用于测试)。此外,您的代码甚至提供了使用Jetty :: JAAS库验证X509证书的登录服务。让我看看是否可以用骆驼码头运行。 – Robin 2017-01-11 19:58:24