2011年12月12日月曜日

jetty8でBASIC認証

jettyでBASIC認証する必要があったので忘れずメモ。

jetty側の設定


まず認証レルムの設定ファイルを用意する。
用意すると言ってもデフォルトで$JETTY_HOME/etc/realm.propertiesが存在するのでこちらを利用する。
下記のフォーマットで記述する。
username: password[,rolename ...]
暗号化する場合は種類に応じてOBF:、MD5:、CRYPT:のプレフィックスを付与する。
暗号化する場合は下記のようにして生成する。
$ java -cp lib/jetty-xxx.jar:lib/jetty-util-xxx.jar org.mortbay.jetty.security.Password ユーザー名 パスワード
しかし、なぜか$JETTY_HOME/lib内にorg.mortbay.jetty.security.Passwordクラスが見つからなかったので
下記2つをダウンロードして生成する。
$ cd <workディレクトリ>
$ wget http://www.java2s.com/Code/JarDownload/jetty-core-6.1.14.jar.zip
$ wget http://www.java2s.com/Code/JarDownload/jetty-util-6.1.18.jar.zip
$ unzip jetty-core-6.1.14.jar.zip
$ unzip jetty-util-6.1.18.jar.zip
$ java -cp jetty-core-6.1.14.jar:jetty-util-6.1.18.jar org.mortbay.jetty.security.Password jetty password
password
OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v
MD5:5f4dcc3b5aa765d61d8327deb882cf99
CRYPT:je5/ATIGzeDQw

続いてjetty.xmlに認証レルムを使用する設定を追記する。
  1. <Configure id="Server" class="org.eclipse.jetty.server.Server">  
  2. …  
  3.     <Call name="addBean">  
  4.       <Arg>  
  5.         <New class="org.eclipse.jetty.security.HashLoginService">  
  6.           <Set name="name">User Realm</Set>  
  7.           <Set name="config">  
  8.             <!-- 上記で用意した認証レルムの設定ファイルを指定 -->  
  9.             <SystemProperty name="jetty.home" default="."/>/etc/realm.properties  
  10.           </Set>  
  11.           <Set name="refreshInterval">0</Set>  
  12.         </New>  
  13.       </Arg>  
  14.     </Call>  
  15. …  
  16. </Configure>  
Webアプリケーション毎に認証レルムを指定したい場合は下記のようにする。
  1. <Configure class="org.eclipse.jetty.webapp.WebAppContext">  
  2.   <Set name="contextPath">/jetty</Set>  
  3.   <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/jetty</Set>  
  4. …  
  5.   <Get name="securityHandler">  
  6.     <Set name="loginService">  
  7.       <New class="org.eclipse.jetty.security.HashLoginService">  
  8.             <Set name="name">User Realm</Set>  
  9.             <Set name="config">  
  10.               <SystemProperty name="jetty.home" default="."/>/etc/realm.properties  
  11.             </Set>  
  12.       </New>  
  13.     </Set>  
  14.   </Get>  
  15. …  
  16. </Configure>  

Webアプリケーション側の設定


web.xmlにBASIC認証用の設定を追記する。
  1. <web-app…  
  2. …  
  3.   <security-constraint>  
  4.     <web-resource-collection>  
  5.       <web-resource-name>Authentication of BASIC</web-resource-name>  
  6.       <url-pattern>/*</url-pattern>  
  7.     </web-resource-collection>  
  8.     <auth-constraint>  
  9.       <role-name>admin</role-name>  
  10.     </auth-constraint>  
  11.   </security-constraint>  
  12.   <login-config>  
  13.     <auth-method>BASIC</auth-method>  
  14.     <realm-name>User Realm</realm-name>  
  15.   </login-config>  
  16.   <security-role>  
  17.     <role-name>admin</role-name>  
  18.   </security-role>  
  19. …  
  20. </web-app>  
ちなみに$JETTY_HOME/etc/webdefault.xmlに記述すれば一律で設定可能。

0 件のコメント:

コメントを投稿