特定目录的 Jetty9 Basic Auth
Jetty9 Basic Auth for specific directories
我们是 运行 多个 Java 网络应用程序,它们使用 Jetty9 作为服务器。
可通过子目录访问这些应用程序:
- 域名.tld/app1
- 域名.tld/app2
- 域名.tld/app3
现在我想通过基本身份验证保护其中两个应用程序。
当使用 Apache 作为服务器时,通过 .htaccess 或 vhost conf 文件可以很容易地实现,但是如何使用 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
您需要设置一些内容来触发身份验证。根据您提供的内容,BASIC 身份验证应该适合您的需要。您已经在上下文 XML 文件中声明了 HashLoginService
,但您还需要在 Web 应用程序本身的 WEB-INF/web.xml 中声明身份验证类型。这看起来像:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My Realm</realm-name>
</login-config>
您还需要在 web.xml 中定义 auth 方法的 security/auth 约束。这有助于根据角色 URL.. 等确定允许谁访问什么。完全限制 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 的安全范围,您需要做一些事情:
- 在 WEB-INF/web.xml
中声明 webapp 的身份验证类型
- 在 WEB-INF/web.xml
中为 webapp 定义 security/auth 约束
- 在 Web 应用程序的上下文 XML 文件中定义 LoginService 的类型(在本例中为 Hash),并提供相关属性文件的路径。
我们是 运行 多个 Java 网络应用程序,它们使用 Jetty9 作为服务器。
可通过子目录访问这些应用程序:
- 域名.tld/app1
- 域名.tld/app2
- 域名.tld/app3
现在我想通过基本身份验证保护其中两个应用程序。
当使用 Apache 作为服务器时,通过 .htaccess 或 vhost conf 文件可以很容易地实现,但是如何使用 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
您需要设置一些内容来触发身份验证。根据您提供的内容,BASIC 身份验证应该适合您的需要。您已经在上下文 XML 文件中声明了 HashLoginService
,但您还需要在 Web 应用程序本身的 WEB-INF/web.xml 中声明身份验证类型。这看起来像:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My Realm</realm-name>
</login-config>
您还需要在 web.xml 中定义 auth 方法的 security/auth 约束。这有助于根据角色 URL.. 等确定允许谁访问什么。完全限制 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 的安全范围,您需要做一些事情:
- 在 WEB-INF/web.xml 中声明 webapp 的身份验证类型
- 在 WEB-INF/web.xml 中为 webapp 定义 security/auth 约束
- 在 Web 应用程序的上下文 XML 文件中定义 LoginService 的类型(在本例中为 Hash),并提供相关属性文件的路径。