プログラムの利用者を限定したい場合、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/*
とするのが正解です。貴重なアドバイスを下さった越冬老師様に、大変感謝いたします。


























