目次へ

10.3. <security-constraint>

<security-constraint>タグはアクセスを制限するWebリソースと、そのWebリソースへアクセスできるロールを定義します。その定義は、アクセス制限するWebリソースを設定する<web-resource-collection>と、アクセスできるロールを設定する<auth-constraint>、クライアントとの通信方法を設定する<user-data-constraint>から成り立っています。以下はその例です。

<security-constraint>
  <web-resource-collection>
    <web-resource-name>admin page</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
    <url-pattern>/root/*</url-pattern>
    <http-method>GET</http-method>
  </web-resource-collection>
  <web-resource-collection>
    <web-resource-name>support page</web-resource-name>
    <url-pattern>/support/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
  <user-data-constraint>
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>

<web-resource-collection>には<web-resource-name><url-pattern><http-method>の3つを定義します。<web-resource-name>はアクセス制限をするWebリソースに名前をつけます。<web-resource-collection>内で、必ず1つ定義しなければなりません。何でも構いませんが、web.xml内で唯一になるようにするのが良いでしょう。

<url-pattern>はアクセス制限をするWebリソースを、URLパターンの形式で指定します。ここに指定するフォーマットは、<servlet-mapping>や<filter-mapping>での<url-pattern>の形式と同じです。

/??? URLが合致するWebリソースを指定します。
/???/* /???/で始まるWebリソースを指定します。
*.??? ???を拡張子にもつWebリソースを指定します。
/* 全てのWebリソースを指定します。

なお<url-pattern>は<web-resource-collection>内に複数個指定する事ができます。例では「/admin/」「/root/」ではじまるWebリソースに対して、アクセス制限をかけることを宣言しています。

<http-method>はアクセス制限の対象となるHTTPメソッドを指定します。「GET」「POST」「PUT」など、HTTPメソッド名を指定します。例では「/admin/」「/root/」ではじまるWebリソースに対して、GETでのアクセスが制限されることになります。POSTなど、GET以外のアクセスは制限対象となりません。なお複数のHTTPメソッドに対してアクセス制限をかける場合には、その数だけ<http-method>を繰り返します。<http-method>を省略した場合には、全てのHTTPメソッドがアクセス制限の対象となります。通常は省略して構わないでしょう。

<web-resource-collection>自体も、<security-constraint>内で複数回繰り返すことができます。制限をかけるWebリソースとHTTPメソッドの組み合わせが複数個ある場合に、繰り返します。例では

  • 「/admin/」「/root/」ではじまるWebリソースに対するGETでのアクセス
  • 「/support/」ではじまるWebリソースに対する全てのアクセス

に対して制限をかけると定義しています。しかし通常は個々のHTTPメソッド毎にアクセス制限を変えることは少ないので、<web-resource-collection>の定義は1つで十分です。

<auth-constraint>は<web-resource-collection>で定義されたWebリソースに対して、アクセスを許可するロールを定義します。

<auth-constraint>
  <role-name>admin</role-name>
</auth-constraint>

アクセスを許可するロールは、<auth-constraint>内で<role-name>を用いて指定します。この時、指定するロール名は、<security-role>で定義したものに含まれていなければなりません。また複数のロールを指定する場合には、<auth-constraint>内に<role-name>を、その数だけ繰り返します。省略することも可能ですが、その場合にはどのロールに対してもアクセスを許可しないことを意味します。なお<auth-constraint>は<security-constraint>内に1つしか定義できません。

<user-data-constraint>はクライアントとの通信方法を指定するものです。これも<security-constraint>内に1つしか定義できません。

<user-data-constraint>
  <transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>

<user-data-constraint>内のタグは<transport-guarantee>だけで、<transport-guarantee>には通信のセキュリティ度合いを指定します。指定できる値は以下の3つです。

NONE セキュリティを要求しない
INTEGRAL 改ざんされない方法を用いて通信することを要求する
CONFIDENTIAL 盗聴されない方法を用いて通信することを要求する

「INTEGRAL」か「CONFIDENTIAL」を指定すると、SSL(HTTPS)を用いて通信することを要求します。<user-data-constraint>を省略すると、「NONE」が指定されたことになります。例では「NONE」を指定していますが、この場合は省略しても変わらないことになります。TomcatでHTTPS通信を行う方法については、後の章で説明します。

最後に、アクセス制限をかけるWebリソースと、アクセスを許可するロールの組み合わせが複数ある場合について説明します。その場合には、<security-constraint>タグを組み合わせの数だけ繰り返してください。<security-constraint>を繰り返すことにより、個々のWebリソースに対して、細かくアクセス権を設定する事ができます。

(実習課題2)

実習課題1のWebアプリケーションに対して、以下のアクセス制限をかけなさい。

  • 「jsp」を拡張子に持つ、Webリソースに対しては、誰のアクセスも許可しない。
  • 「/admin/」ではじまるWebリソースに対して、adminロールのみのアクセスを許可する。
  • それ以外のWebリソースに対して、admin, userロールにアクセスを許可する。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ