- 10.1. J2EEのアクセス制限機能
- 10.2. <security-role>
- 10.3. <security-constraint>
- 10.4. <login-config>
- 10.5. Tomcatでの設定
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ロールにアクセスを許可する。