lepidolite-core (0.1.1) | 2008-07-20 21:33 |
lepidolite-dao (0.2.1) | 2009-05-10 21:16 |
Java製のWebアプリケーションでは、ログインにJaveEEレルムを使用する事で権限管理がしやすくなります。 このページでは、Webアプリケーションを作る上での主な用途を、どのように実装すれば良いのかを紹介します。
ここで紹介する権限管理の方法を使うためには、アプリケーションがJavaEEレルムによる認証を使用している必要が有ります。
Apache Tomcat 5.5における設定方法は、レルムと入れ子集合モデルによる組織構造管理を参照してください。 他のサーブレットコンテナにおける設定方法は、その製品のマニュアルを参照してください。
web.xmlでsecurity-constraint要素に指定する事で、URL単位でのアクセス制限をする事ができます。 これにより、画像ファイル, 外部javascriptファイル, 外部cssファイルなどを非ログイン状態で見せ、 他のコンテンツに対してはログインを要求するように設定する事ができます。
<security-constraint> <display-name>Public area</display-name> <web-resource-collection> <web-resource-name>Static resource area</web-resource-name> <url-pattern>/images/*</url-pattern> <url-pattern>/scripts/*</url-pattern> <url-pattern>/styles/*</url-pattern> </web-resource-collection> </security-constraint> <security-constraint> <display-name>Protected Area</display-name> <web-resource-collection> <web-resource-name>Context Area</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>*</role-name> </auth-constraint> </security-constraint>
struts-config.xmlでaction要素のroles属性にロール名を列挙しておく事で、そのロールを持つログインユーザしかアクションを実行できないように出来ます。
<action path="/users" type="jp.sourceforge.lepidolite.actions.UsersAction" name="form.users" scope="request" parameter="default=manipulator,entry" roles="administrator"> <forward name="manipulator" path="tiles.user.manipulator"/> <forward name="entry" path="tiles.user.entry"/> </action>
tiles-defs.xmlでdefinition要素のrole属性にロール名を列挙しておく事で、<tiles:insert>タグでタイルを指定しても、そのロールを持つログインユーザのときしかインサートを実行しないように出来ます。
<definition name="tiles.devmenu" path="/WEB-INF/jsp/devmenu.jsp"/>
javax.servlet.http.HttpServletRequest#isUserInRole(String)を使用する事で、ログインユーザが特定のロールを持っているか確認する事が出来ます。
Strutsの<logic:present>タグのrole属性にロール名を列挙しておく事で、ログインユーザがそのロールを持っているときだけ、中のjspを処理出来ます。 また、<logic:notPresent>タグのrole属性にロール名を列挙しておく事で、ログインユーザがそのロールを持っていないときだけ、中のjspを処理出来ます。