Jetty9 Basic Auth用于特定目录

时间:2017-03-31 07:29:07

标签: java jetty basic-authentication jetty-9

我们正在运行多个使用Jetty9作为服务器的Java Web应用程序。

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

  • 使用domain.tld / app1的
  • 使用domain.tld / APP2
  • 使用domain.tld / APP3

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

当使用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

1 个答案:

答案 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 确定安全范围,你需要做一些事情:

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