「http://memoyasu.blogspot.com/2011/11/tomcat-6windows-x64-jdbcform.html」では、JBDCレルムを使用したFORM認証の設定方法について記載しました。
前回は、ユーザのパスワードは平文でMySQLに格納してFORM認証していたので、今回は、ハッシュ関数でダイジェスト化したパスワードを使用し、FORM認証します。
①Tomcatのcatalina.jar(C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib配下)には、org.apache.catalina.realm.RealmBaseクラスが存在します。このクラスでは、ダイジェスト値を作成してくる機能があります。以下のjavaコマンドを実行し、"pass"をダイジェスト化します。
c:\>set CATALINA_HOME=C:\Program Files\Apache Software Foundation\Tomcat 6.0
c:\>java -cp "%CATALINA_HOME%\lib\catalina.jar;%CATALINA_HOME%\bin\tomcat-juli.j
ar" org.apache.catalina.realm.RealmBase -a SHA1 pass
pass:9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684
★現時点でSHA2にはまだ対応していないようだ。。。。
②算出したダイジェスト値をMySQLのユーザテーブルに格納します。。。。と思ったら、ユーザテーブルのパスワードの型をvarchar(10)で作成していたため、格納領域が足りませんでした。まず、ユーザテーブルのパスワードの型を拡張します。
mysql> alter table auth_users modify
-> user_password varchar(50);
Query OK, 1 row affected (1.91 sec)
Records: 1 Duplicates: 0 Warnings: 0
③算出したダイジェスト値をMySQLのユーザテーブルに格納します。
mysql> update auth_users
-> set user_password='9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684'
-> where user_name='hanako';
Query OK, 1 row affected (0.19 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from auth_users;
+-----------+------------------------------------------+
| user_name | user_password |
+-----------+------------------------------------------+
| hanako | 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684 |
+-----------+------------------------------------------+
1 row in set (0.00 sec)
③server.xml(C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf配下)を編集します。JDBCレルムの設定において、digest値に'SHA1'を記載します。
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="org.gjt.mm.mysql.Driver"
connectionURL="jdbc:mysql://localhost:3306/bushido"
userTable="auth_users" userNameCol="user_name" userCredCol="user_password"
userRoleTable="auth_roles" roleNameCol="role_name"
connectionName="root" connectionPassword="password"
digest="SHA1"/>
④Tomcatを再起動します。「http://localhost:8080/sampleapp/sample.html」にアクセスし、FORM認証が成功することを確認します。
0 件のコメント:
コメントを投稿