1

一部のページを安全に開いてほしい。これらのページのほとんどは、「my_Account_」という名前で開始されています

たとえば、これらのページの 1 つは「my_account_add_credit_card.xhtml」です。

これを行うために、以下のコードを web.xml に入れました

<security-constraint>
    <web-resource-collection>           
        <web-resource-name>my account</web-resource-name>
        <description>my account</description>
        <url-pattern>/my_account_*</url-pattern>
    </web-resource-collection>  
    <user-data-constraint>
        <description/>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

しかし、うまくいきませんでした。以下のようにURLパターンも変更しました

<url-pattern>/*</url-pattern>

それはうまくいきましたが、問題は、これがHTTPSですべてのページを開くことです.HTTPSですべてのページを開きたくありません. 「my_account_」で始まるページを開くだけです。

グラスフィッシュを使っています

4

1 に答える 1

1

tldr; 仕様によると、<url-pattern>期待どおりの動作をしません。考えられる解決策については、以下を参照してください。


サーブレット 3.0 仕様のセクション 13.8.3 リクエストの処理 (「セキュリティ」の章の下) では、リクエストのセキュリティ制約がどのように選択されるかが説明されています。

サーブレット コンテナは、リクエストを受信すると、95 ページの「URL パスの使用」で説明されているアルゴリズムを使用して、リクエスト URI に最適な urlpattern で定義された制約 (存在する場合) を選択します。

上記のセクションでは、URL の照合方法について説明しています。ただし、特にセクション 12.2 では、マッピングが指定されています。

  • 「/」文字で始まり「/*」サフィックスで終わる文字列は、パス マッピングに使用されます。
  • 「*.」で始まる文字列。プレフィックスは拡張マッピングとして使用されます。
  • 「/」文字のみを含む文字列は、アプリケーションの「デフォルト」サーブレットを示します。この場合、サーブレット パスはリクエスト URI からコンテキスト パスを引いたものであり、パス情報は null です。
  • 他のすべての文字列は、完全一致のみに使用されます。

これによると/my_account_*LASTカテゴリに分類されます (最初に分類されるだけでは終わりません/*)。これが、マッピングが機能しない理由です。

あなたは何ができますか?

  1. ディレクトリレイアウトを変更することをお勧めします (例)

    /my_account_file1.jsp
    /my_account_file2.jsp
    

    ディレクトリを作成し、それらのファイルをその中に入れます。

    /my_account/
        file1.jsp
        file2.jsp
    

    マッピングは次のようになります。

    <url-pattern>/my_account/*</url-pattern>
    
  2. Spring Security、Apache Shiro、JBoss Picketlink などのサードパーティ セキュリティ ライブラリを使用できます。

  3. フィルターを追加して/*、プログラムでセキュリティを強化できます (いいえ、自分でやらないでください。ポイント 2 を参照してください。完全性のためにここに含まれています)。サーブレットを使用して同様のアプローチを実現できますが、これには反対することをお勧めします

于 2014-08-13T11:23:59.020 に答える