<目次>
(1) Tomcatのフォーム認証(DataSourceRealm)で403エラー等が発生した場合の対処
(1-1) エラー①:HTTP 403 Forbidden
(1-1-1) 発生状況・エラーメッセージ
(1-1-2) 原因
(1-1-3) 対策
(1-2) エラー②:ログインエラー画面が表示される(エラーメッセージなし)
(1-2-1) 発生状況・エラーメッセージ
(1-2-2) 原因
(1-2-3) 対策
(1) Tomcatのフォーム認証(DataSourceRealm)で403エラー等が発生した場合の対処
Tomcatのフォーム認証(DataSourceRealm)で403エラーなど認証が正常に機能しない場合の原因や対策を備忘として残します。
(1-1) エラー①:HTTP 403 Forbidden
(1-1-1) 発生状況・エラーメッセージ
フォーム認証の設定をデータソース利用方式(DataSourceRealm)で設定したところ、以下のような状況になりました。
HTTPステータス 403 - Forbidden
(1-1-2) 原因
原因は403の意味通り、権限の設定が誤っていました。
(1-1-3) 対策
Tomcatのcontext.xml内のDataSourceRealmの設定で指定しているroleNameColカラムの権限を修正しました。
(1-2) エラー②:ログインエラー画面が表示される(エラーメッセージなし)
(1-2-1) 発生状況・エラーメッセージ
こちらは正しいID/パスワードを入力しているはずが、ログインエラー画面に遷移してしまい、認証が通らない事象です。
ネットワークトラフィックを確認すると、正常に認証出来た時はHTTPステータスコードが303(See Other)になっていた所を普通に200(OK)になっています。なので、ネットワーク的にはリクエストが正常して、IDかパスワードが誤っていたためにログインエラー画面を返しただけで、特に異常なしでした。
(図121)
(1-2-2) 原因
私の場合は、結論としては単純にユーザIDが間違っていました。ただし、厄介だったのがDBにユーザIDを登録する際に「意図せず末尾に半角スペースが混じっていた」事に気付かず、正しいIDだと思い込んで入力し続けていたため、中々気付く事ができませんでした。
半角スペースが混入した原因は、DBのテーブル定義でユーザIDを格納するカラムをCHAR(10)に設定していたためでした。
固定で10バイトを確保するため、10バイトに満たないID(例:user01)の場合は10バイトになるように余りを半角スペースで埋めていたのです。
(図122)
(1-2-3) 対策
上記解決のため、テーブル定義でユーザIDのカラムをCHAR(10)⇒VARCHAR(10)に変更する事で、意図したユーザIDでログインできるようになりました。