我想以編程方式實現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