[GWT] GWTとRealm認証

サーブレットコンテナのRealm認証をGWTで利用したい場合、注意が必要だ。

通常、web.xmlに以下のように書いて、認証エリアを指定すると思うが、GWTで認証を利用したい場合、Ajax通信先のURLも認証エリアに指定する必要がある。URLは、web.xmlの中ののどこかに記載されているハズだ。

私の場合は、Ajax通信するまえのHTMLはちゃんと認証が掛って、正しいIDでログインしているにも関わらず、Ajax通信先のURLを認証エリアに指定していなかったために、Principal情報を取得できませんでした。

<web-resource-collection>
<web-resource-name>SobaEducationPortal</web-resource-name>
<url-pattern>/secure/*</url-pattern>
<!– ↓この指定を忘れるとうまくいかない –>
<url-pattern>/ajax/*</url-pattern>
</web-resource-collection>

この設定さえできてしまえば、Servlet側のプログラムは簡単だ。

RemoteServiceServletの拡張クラスで、getThreadLocalRequest()を利用しHttpServletRequestのインスタンスを取得すると後は、通常通りPrincipal情報を取得する事ができる。

HttpServletRequest request = this.getThreadLocalRequest();
Principal principal = request.getUserPrincipal();

Be Sociable, Share!

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください