特定目录的 Jetty9 Basic Auth

Jetty9 Basic Auth for specific directories

我们是 运行 多个 Java 网络应用程序,它们使用 Jetty9 作为服务器。

可通过子目录访问这些应用程序:

现在我想通过基本身份验证保护其中两个应用程序。

当使用 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 的安全范围,您需要做一些事情:

  1. 在 WEB-INF/web.xml
  2. 中声明 webapp 的身份验证类型
  3. 在 WEB-INF/web.xml
  4. 中为 webapp 定义 security/auth 约束
  5. 在 Web 应用程序的上下文 XML 文件中定义 LoginService 的类型(在本例中为 Hash),并提供相关属性文件的路径。