ひとこと

― 今日のひとこと ―
気付けば前回更新してから2年以上経ってた
(2023.10.25)

2013年2月2日土曜日

Amazon Web Serviceで仮想サーバ構築 No.8 -TomcatでBASIC認証-

Tomcatサーバのサーブレットプログラムに対するアクセスにBASIC認証を適応する方法。

プログラムの利用者を限定したい場合、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/*
     
 
とするのが正解です。


貴重なアドバイスを下さった越冬老師様に、大変感謝いたします。


4 件のコメント:

  1. ちょっと調べてみた(´・ω・`)
    No.3から
    >>TomcatのWebappsフォルダ直下(/opt/tomcat7/webapps/)にプロジェクトを配置する。

    ここにプロジェクトおいて、

    >><URL-PATTERN>/*</URL-PATTERN><!--フォルダ内の全てのプログラムに適応-->

    こう書くとULR-PATTERNが
    /opt/tomcat7/webapps/*
    になるんじゃないかなーと(半信半疑

    何はともあれ基準のフォルダがずれるみたいだから
    URL-PATTERNをいじってみると解決するかもね(´・ω・`)

    返信削除
  2. なるほど!
    url-patternはweb-resource-nameで指定したフォルダからのパスではないんですね。

    webapps/*だとすると別のプロジェクトに影響しちゃう事になりますが、
    web.xmlの作用ってそこまで及ぶんだろうか・・・
    まだまだ分からない事だらけなので、色々検証してみます。

    謝謝越冬老師!

    返信削除
    返信
    1. 結果として
      /opt/tomcat7/webapps/*
      ではなくて、もう一つ下のディレクトリの
      そのプロジェクトの範囲だったわけでw

      よくわからないままのコメント失礼しましたw

      削除
    2. いえいえ、重要なヒントになりました。
      また何かお気づきになりましたら、是非お気軽にコメント頂ければ幸いです。

      削除