我尝试在嵌入式Jetty 6.1.7项目中使用基于表单的身份验证。
这就是我需要在相同的上下文中提供servlet和html(login.html)的原因 使身份验证工作。从那以后我不想保证空洞应用 不同的语境应该有不同的角色。码头javadoc说a ContextHandlerCollection可以处理一个上下文的不同处理程序,但我没有 让它工作。我的样本忽略了身份验证的东西不起作用,为什么?
ContextHandlerCollection contexts = new ContextHandlerCollection();
// serve html
Context ctxADocs= new Context(contexts,"/ctxA",Context.SESSIONS);
ctxADocs.setResourceBase("d:\\tmp\\ctxA");
ServletHolder ctxADocHolder= new ServletHolder();
ctxADocHolder.setInitParameter("dirAllowed", "false");
ctxADocHolder.setServlet(new DefaultServlet());
ctxADocs.addServlet(ctxADocHolder, "/");
// serve a sample servlet
Context ctxA = new Context(contexts,"/ctxA",Context.SESSIONS);
ctxA.addServlet(new ServletHolder(new SessionDump()), "/sda");
ctxA.addServlet(new ServletHolder(new DefaultServlet()), "/");
contexts.setHandlers(new Handler[]{ctxA, ctxADocs});
// end of snippet
欢迎任何有用的想法!
感谢。
狼
答案 0 :(得分:3)
最后我说得对,解决方案是使用最新的jetty 6.1.12 rc2。 我没有看看他们改变了什么 - 我很高兴它现在有效。
答案 1 :(得分:1)
使用Web应用程序描述符:
将其粘贴到您的web.xml:
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>MySiteRole</role-name>
</security-role>
<security-constraint>
<display-name>ProtectEverything</display-name>
<web-resource-collection>
<web-resource-name>ProtectEverything</web-resource-name>
<url-pattern>*.*</url-pattern>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>MySiteRole</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>ExcludeLoginPage</web-resource-name>
<url-pattern>/login.html</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
如果没有身份验证,这将隐藏除login.html之外的所有内容。