プログラムの利用者を限定したい場合、No.7で利用可能になったHTTPS通信と併用する事でより安全に通信を行えるようになる。
っていうかBASIC認証で使用する秘密情報は素でネットワークを流れるから暗号通信と併用しないと危険。
今回はデフォルトで用意されている「UserDatabaseRealm」を利用する。
1.No.2にメモした方法でインスタンスに接続する。
2.tomcatのtomcat-users.xmlを編集する。
roleに関する部分のコメントを解除し、必要に応じてロールやユーザを追加する。
ここを
こうする
今回はTomcatにアクセスを許可するユーザには「tomcat」というroleを割り当てる。
3.サーブレットのweb.xmlを編集する。
web-appタグにsecurity-constraintタグとlogin-configタグとsecurity-roleタグを追加する。
↓はJava ServletとAWS-SESでメール送信 No.3 で作成したプログラムにBASIC認証を導入した場合の例
SendMail send.SendMail SendMail /SendMail html /* tomcat BASIC UserDatabaseRealm tomcat
4.Tomcatを再起動する。
これで設定はおしまい。BASIC認証を設定したプログラムにアクセスしてみると・・・
このように認証ウィンドウが開く。
ただ、いまいちよくわかんないんだけど
web-resource-nameタグで指定したhtmlフォルダ以外のプログラムにアクセスしても認証ウィンドウが出てくるんだよね。
まぁ自分の場合はメール送信プログラムの実行前に認証できてればよかったから別にいいけど。
この辺はきっと未来の自分がなんとかしてくれるだろう。。
追記(2013/02/03_17:22):web-resource-collectionタグ内の記述について
web-resource-nameタグに記述するのは「リソース名」ではなく、
「アクセス制限ルールを適用するリソースに対する任意の名称」です。つまり何でもいいようです。
また、url-patternタグに記述するのは「web-resource-nameで指定したリソースからのパス」ではなく、
単純に「アクセスを制限するリソースのURL」でした。servlet-mappingタグでのurl-patternの指定と同じ記法です。
たとえば、「http://xxx.xxx.xxx.xxx/SendMail/html/」以下のプログラムに対するアクセスに認証を設ける場合は、
とするのが正解です。まろ最高 /html/*
貴重なアドバイスを下さった越冬老師様に、大変感謝いたします。
ちょっと調べてみた(´・ω・`)
返信削除No.3から
>>TomcatのWebappsフォルダ直下(/opt/tomcat7/webapps/)にプロジェクトを配置する。
ここにプロジェクトおいて、
>><URL-PATTERN>/*</URL-PATTERN><!--フォルダ内の全てのプログラムに適応-->
こう書くとULR-PATTERNが
/opt/tomcat7/webapps/*
になるんじゃないかなーと(半信半疑
何はともあれ基準のフォルダがずれるみたいだから
URL-PATTERNをいじってみると解決するかもね(´・ω・`)
なるほど!
返信削除url-patternはweb-resource-nameで指定したフォルダからのパスではないんですね。
webapps/*だとすると別のプロジェクトに影響しちゃう事になりますが、
web.xmlの作用ってそこまで及ぶんだろうか・・・
まだまだ分からない事だらけなので、色々検証してみます。
謝謝越冬老師!
結果として
削除/opt/tomcat7/webapps/*
ではなくて、もう一つ下のディレクトリの
そのプロジェクトの範囲だったわけでw
よくわからないままのコメント失礼しましたw
いえいえ、重要なヒントになりました。
削除また何かお気づきになりましたら、是非お気軽にコメント頂ければ幸いです。