TOMCATいろいろ --覚書状態

はじめに

Tomcatの設定やらなんやらの覚書です

Tomcat4.0.4を使用していて突如 Security Manager が有効になる

Tomcat4.0.4 を Eclipse2.1 Lomboz で使用していて突如 Security Manager が有効になりました。(2003/5/19)
発生時の環境

Windows2000sp3
IE6.0(その他、ネスケ4.0・6.1・7? opera など)
j2sdk1.4.1_02
Tomcat4.0.4
Eclipse2.1
Lomboz

原因不明、情報求む



Tomcat4.1.12以上で /servlet/* にアクセスできない

Tomcat4.1.12以上を使用する場合、/servlet/* を指定するとHTTP Status 404 が帰ってきます。
これはデフォルトの設定では /servlet/* にアクセスがあった場合、サーブレットを実行するようになっていないためです。

解決方法>

[Tomcatのフォルダ]\conf\web.xmlを編集します。
273行目付近の以下の赤字の2行のコメント行をはずします。
(修正前)
<!--
<servlet-mapping>
  <servlet-name>invoker</servlet-name>
  <url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->
(修正後)
<servlet-mapping>
  <servlet-name>invoker</servlet-name>
  <url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

この修正で /servlet/* にアクセスがあった場合にサーブレットが実行されるようになります。
編集が終了したらTomcatを再起動してください。

Servlet API 2.3のfilterの使い方 --覚書

Java/filterに移動

Tomcatのロールとレルムで認証機能を簡略化する

crr(とあるテーブル)を間借りして使えるか検証中(03/06/18)
jakarutaの解説ページはここ
ポイントは。。。

  1. JDBCレルムでVIEWが使えるか?
  2. 制限をかける単位はどういった形で実現されるか? と言った所でしょうか。。。

JDBC Realm で、フォームベース認証

  • まず、crr に user と user_roles を作った
    create table users (
      user_name         varchar(15) not null primary key,
      user_pass         varchar(15) not null
    );
    
    create table user_roles (
      user_name         varchar(15) not null,
      role_name         varchar(15) not null,
      primary key (user_name, role_name)
    );
  • server.xml の中に以下の Realm を宣言
    	<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" 
    	      driverName="org.postgresql.Driver"
    	   connectionName="★ないしょ★"
    	   connectionPassword="★ないしょ★"
    	   connectionURL="jdbc:postgresql://10.23.1.235/crr"
    	       userTable="users" userNameCol="user_name" userCredCol="user_pass"
    	   userRoleTable="user_roles" roleNameCol="role_name"/>

    この時点で、VIEWは使えるような気がします。*1

    userTable と userRoleTable? が指定できますので。。。

    しかし、これを server.xml に直接書き込むのはつらいような気がする。DBから情報の取得に失敗した場合、例外でtomcatが起動しません。

    • 対象 context*2 のWEBアプリの web.xml に以下のSecurity設定をおこなう
      	<security-constraint>
      		<web-resource-collection>
      			<web-resource-name>datasource</web-resource-name>
      			<url-pattern>/*</url-pattern>
      		</web-resource-collection>
      		<auth-constraint>
      			<role-name>2</role-name>
      		</auth-constraint>
      	</security-constraint>
    • つづいて認証要素を記述
      	<login-config>
      		<auth-method>FORM</auth-method>
      		<form-login-config>
      			<form-login-page>/login.jsp</form-login-page>
      			<form-error-page>/loginError.jsp</form-error-page>
      		</form-login-config>
      	</login-config>
      • この設定の場合、/datasource以下にアクセスするとまず/login.jspが表示される。
      • crrに作った「users」に登録されているID/passwordを入力すると /index.jsp に遷移する。
      • 「users」に存在しなければ /loginError.jsp に遷移する。
login.jsp & loginError.jsp 添付
  • Securityでは「<role-name>2</role-name>」のみ対象となっているので「crr.users」に登録されていても「<role-name>2</role-name>」でないとページを参照できない。
  • ただ、ロールが違う場合は「403」が帰ってくるので、以下を web.xml に追加して回避した。
    	<error-page>
    		<error-code>403</error-code>
    		<location>/roleError.jsp</location>
    	</error-page>
  • 違うステータスが帰ってくる場合もあるので、考えうるcode(404とか500とか)も全部記述してひとつのエラーページに飛ばすのがよいかと -20031017deku

JDBC Realm で VIEW は使えるか?

  • 結論から言うと使えます。
  • とりあえず users と user_roles をひとつの VIEW にまとめます
    create view v_users 
    as 
        select users.user_name, users.user_pass, user_roles.role_name
        from users,user_roles 
        where users.user_name = user_roles.user_name
  • server.xml の Realm を VIEW を参照するように変更します
    	<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" 
    	      driverName="org.postgresql.Driver"
    	   connectionName="★ないしょ★"
    	   connectionPassword="★ないしょ★"
    	   connectionURL="jdbc:postgresql://10.23.1.235/crr"
    	       userTable="v_users" userNameCol="user_name" userCredCol="user_pass"
    	   userRoleTable="v_users" roleNameCol="role_name"/>

この状態でアクセスのテストをおこなった結果、特に何も問題ありません。

JDBC Realm で制限をかける単位はどういった形で実現できる?

  • 進んでません・・・

JDBC Realm を Struts と連携させて利用してみる

Java/Struts覚書

Data Source Realm

  • 進んでません。。。

JNDI Realm

  • 進んでません。。。


TOMCATをサービスで起動する

TOMCATのディレクトリインデックスを見せない。

  • web.xml
       <servlet>
           <servlet-name>default</servlet-name>
           <servlet-class>
             org.apache.catalina.servlets.DefaultServlet
           </servlet-class>
           <init-param>
               <param-name>debug</param-name>
               <param-value>0</param-value>
           </init-param>
           <init-param>
               <param-name>listings</param-name>
               <param-value>true</param-value>
           </init-param>
           <load-on-startup>1</load-on-startup>
       </servlet>
<param-name>listings</param-name>
<param-value>true</param-value>

<param-name>listings</param-name>
<param-value>false</param-value>

にするだけ。

Apache-Tomcat連携をしている場合の問題点

その他の情報

  • web.xml にcommentで日本語を入れたらおかしくなった。。。覚書 -- [[web.xml ]] 2003-06-19 (木) 14:20:22
  • APサーバの機能にPreparedStatement?をキャッシュする機能があるらしい。WebLogic?は実装しているそうだがTOMCATは?実装していれば使うとパフォーマンスアップかも・・・ -- PreparedStatement? 2003-10-13 (月) 17:42:18
  • WebSphere?もできるらしい・・・ -- IBM? 2003-10-15 (水) 00:03:19




*1 テーブル名を指定できるので…
*2 レルムを追加したcontext

添付ファイル: fileloginError.jsp 698件 [詳細] filelogin.jsp 645件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-07 (金) 16:01:32 (47d)