嵌入式Jetty通过表单身份验证提供静态内容
时间:2020-03-05 18:56:08 来源:igfitidea点击:
我尝试在嵌入式Jetty 6.1.7项目中使用基于表单的身份验证。
这就是为什么我需要在同一上下文中提供servlet和html(login.html)
使身份验证工作。我不想保护打孔应用程序,因为
不同的上下文应该需要不同的角色。码头javadoc指出
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
任何有帮助的想法都欢迎!
谢谢。
冈美
解决方案
回答
使用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之外的所有内容。
回答
最终我理解正确,解决方案是使用最新的码头6.1.12 rc2.
我没有检查他们所做的更改,但我很高兴它现在可以工作了。