我们正在运行多个使用Jetty9作为服务器的Java Web应用程序。
可通过子目录访问应用程序:
现在我想通过基本身份验证保护其中两个应用程序。
当使用Apache作为服务器时,通过.htaccess或vhost conf文件可以很容易地实现,但是如何通过Jetty实现这一点?
不幸的是,Jetty文档并没有帮助我。
提前致谢。
编辑:现在我在jetty-context.xml中得到了以下内容,但没有任何反应:
<?xml version='1.0' encoding='utf-8'?>
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/app1</Set>
<Set name="war">/opt/software/web/view.war</Set>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.RequestLogHandler" id="RequestLog">
<Set name="requestLog">
<New class="org.eclipse.jetty.server.NCSARequestLog" id="RequestLogImpl">
<Set name="filename">/home/software/something/log/access-something-yyyy_mm_dd.request.log</Set>
<Set name="filenameDateFormat">yyyy_MM_dd</Set>
<Set name="logTimeZone">GMT</Set>
<Set name="retainDays">90</Set>
<Set name="append">true</Set>
<Set name="logLatency">true</Set>
</New>
</Set>
</New>
</Set>
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">Software</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/software/realm.properties</Set>
<Call name="start"></Call>
</New>
</Set>
</Get>
</Configure>
realm.properties的内容:
admin: password,admin,user
答案 0 :(得分:1)
您需要设置一些内容来触发身份验证。根据您提供的内容,BASIC auth应该满足您的需求。您已经在上下文XML文件中声明了HashLoginService
,但您还需要在webapp本身的WEB-INF / web.xml中声明auth类型。这看起来像是:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My Realm</realm-name>
</login-config>
您还需要在web.xml中定义auth方法的security / auth约束。这有助于确定谁可以根据角色URL..etc访问哪些内容。完全限制webapp的示例可能如下所示:
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
<role-name>other</role-name>
<role-name>roles</role-name>
</auth-constraint>
</security-constraint>
Jetty支持其他Authentication mechanisms,如果更适合您的需求。
所以,回顾一下,为每个webapp 确定安全范围,你需要做一些事情: