6

ほとんどのページで基本認証を必要とする Web アプリケーション (Servlet 3.0 / Tomcat 7) をアップグレードしています。このアプリケーションには監視サーブレットの小さなセットがあり、どれも保護する必要はありません。私web.xmlの には、現在次のsecurity-constraintブロックがあります (プライベート情報はアルファベットの文字に置き換えられています):

<security-constraint>
    <display-name>Security Constraint</display-name>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>CN=A,OU=B,OU=C,OU=D,DC=E,DC=F</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Unprotected Pages</web-resource-name>
        <url-pattern>/health/*</url-pattern>
    </web-resource-collection>
</security-constraint>

「ヘルス」パス内には、次の 3 つのエンドポイントがあります。

  • /health/monitor/status
  • /health/monitor/version
  • /health/monitor/version/xml

いずれかのエンドポイントにアクセスしても、version(予想どおり) 資格情報の入力を求められません。しかし、そのstatusページにアクセスすると、ブラウザーに基本認証ボックスが表示されます。「キャンセル」を押すと、通常どおりページをロードできます。同様に、すでにログインしている場合は、ログインの有効期限が切れるまで、ステータス画面で再度プロンプトが表示されることはありません。

これは、安全なコンテンツを にデプロイしないことで解決できることはわかってい/*ますが、それを移動するには、ハードコードされたパスを変更してテストするのに多くの作業が必要です (非常に古いアプリケーションです)。行う。必要に応じてこれを行うことにオープンですが、安全なコンテンツ パスを変更せずにこれが可能かどうかを確認したかったのです。監視サーブレットのパスは完全に自由です

これはTomcat 7に関連しているようです-複数のセキュリティ制約が機能していませんが、完全な失敗ではなく、エンドポイントの1つだけが失敗しているため、非常に奇妙です。検索に時間を費やしましたが、私がやっていることはうまくいくように見えます...しかし、うまくいきません。

バージョン 3.0を使用web-appして、Tomcat 7 にデプロイしています (バージョン 7.0.42 と 7.0.47 を試しました)。私はすでにsecurity-constraintブロックの順序を変更しようとしました。

考え?

これが参考のための私の完全なweb.xmlものです(監視サーブレットはJavaアノテーションを介して管理されるため、存在しないことに注意してください):

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<display-name>TPS</display-name>

<servlet>
    <servlet-name>CFMLServlet</servlet-name>
    <servlet-class>railo.loader.servlet.CFMLServlet</servlet-class>
    <init-param>
      <param-name>configuration</param-name>
      <param-value>/WEB-INF/railo/</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>AMFServlet</servlet-name>
    <servlet-class>railo.loader.servlet.AMFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>AttachmentServlet</servlet-name>
    <servlet-class>com.package.toolshed.AttachmentServlet</servlet-class>
    <init-param>
        <param-name>configFilePath</param-name>
        <param-value>com/package/toolshed/configuration/tps-config.xml</param-value>
    </init-param>
    <init-param>
        <param-name>configPathParam</param-name>
        <param-value>attachment.servlet.pathPrefix</param-value>
    </init-param>
    <load-on-startup>6</load-on-startup>
</servlet>


<servlet-mapping>
    <servlet-name>CFMLServlet</servlet-name>
    <url-pattern>*.cfm</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CFMLServlet</servlet-name>
    <url-pattern>*.cfml</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CFMLServlet</servlet-name>
    <url-pattern>*.cfc</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>AMFServlet</servlet-name>
    <url-pattern>/flashservices/gateway/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>AttachmentServlet</servlet-name>
    <url-pattern>/attachments/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.cfm</welcome-file>
    <welcome-file>index.cfml</welcome-file>
</welcome-file-list>

<security-constraint>
    <display-name>Security Constraint</display-name>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>CN=A,OU=B,OU=C,OU=D,DC=E,DC=F</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Unprotected Pages</web-resource-name>
        <url-pattern>/health/*</url-pattern>
    </web-resource-collection>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>TPS</realm-name>
</login-config>

<security-role>
    <role-name>CN=A,OU=B,OU=C,OU=D,DC=E,DC=F</role-name>
</security-role>
</web-app>
4

1 に答える 1

6

これを理解しました。

ステータス サーブレットが CSS ドキュメントをロードしていて、そのロードが認証をトリガーしていたことが判明しました。私を混乱させたのは、ステータスとバージョンの両方が JSP をロードし、これらの JSP をセキュリティ制約で考慮する必要がないことです (最初に行った手順の 1 つは*.jsp、セキュリティ制約に追加することでした)。JSP は CSS と同じパスに存在します。

新しい、機能する web.xml

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Unprotected Pages</web-resource-name>
        <url-pattern>/health/*</url-pattern>
        <url-pattern>/monitoringCommon.css</url-pattern>
    </web-resource-collection>
</security-constraint>
于 2013-12-11T18:16:00.370 に答える