重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

web.xmlに次の記述をしていると、normal権限のユーザでログインするとHTTP Status 403に飛んでしまいます。

<security-constraint>
<web-resource-collection>
<web-resource-name>Certification Area for admin</web-resource-name>
<url-pattern>/f.html</url-pattern>
<url-pattern>/a.html</url-pattern>
<url-pattern>/c.html</url-pattern>
<url-pattern>/n.html</url-pattern>
<url-pattern>/s.html</url-pattern>
<url-pattern>/サーブレット</url-pattern>

</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Certification Area for normal</web-resource-name>
<url-pattern>/f.html</url-pattern>
<url-pattern>/s.html</url-pattern>
<url-pattern>/サーブレット</url-pattern>

</web-resource-collection>
<auth-constraint>
<role-name>normal</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/auth.html</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>

環境
WindowsXP Home Edition
Tomcat4.1.36
MySQL4.0.26
mysql-connector-java-3.1.13-bin.jar

検索もしていますが、どれも解決に結びつきません。
原因、解決法が分かる方は、ご教示ください。

A 回答 (5件)

結果的に動いてメデタシ。


でも一抹の疑問が。

それは"normal"権限でFORMにログインされる場合
usernameとpasswordはどこで設定されますか?

何か立場が違ってしまいましたね。

この回答への補足

>usernameとpasswordはどこで設定されますか?
データベース(MySQL)で
ユーザテーブルとユーザ権限テーブルを作りまして
前者にユーザのユーザID、パスワードなど諸々の情報を、
後者にユーザIDと権限(normalあるいはadmin)を設定しています。

後は
%CATALINA_HOME%\conf\server.xmlをテキストやサイトを参考にしながら編集しました。

補足日時:2006/09/29 17:38
    • good
    • 0

現状に付け加えてみたら可能性ありかと。


<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="normal"/>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="admin" password="admin" roles="admin,manager"/>
<user username="normal"password="normal"roles="normal"/>
</tomcat-users>
これでうまく行けばログインでusername normal
password normalでいけるような気がします。

この回答への補足

元のweb.xmlを共通で使えるリソースを考え以下のように書き直したら成功しました。
<security-constraint>
<web-resource-collection>
<web-resource-name>Certification Area for All</web-resource-name>
<url-pattern>/f.html</url-pattern>
<url-pattern>/s.html</url-pattern>
<url-pattern>/サーブレットの一つ</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
<role-name>normal</role-name>
</auth-constraint>
</security-constraint>

<security-constraint>
<web-resource-collection>
<web-resource-name>Certification Area for Admin</web-resource-name>
<url-pattern>/a.html</url-pattern>
<url-pattern>/c.html</url-pattern>
<url-pattern>/n.html</url-pattern>
<url-pattern>/サーブレット</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
「共通に使えるものはまとめて書くように」というルールでもあるんでしょうか?

補足日時:2006/09/27 22:27
    • good
    • 0
この回答へのお礼

度々の返信を感謝します。
そのように加えても、HTTP Status 403 となってしまいます。

お礼日時:2006/09/27 22:14

全く自信はないですがでは


Tomcatの%CATALINA_HOME%\conf\tomcat-users.xml
の設定は現状どのようになっていますか。

この回答への補足

以下のようになっています。
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="admin" password="admin" roles="admin,manager"/>
</tomcat-users>

index.html(照準で表示するページ)内にf.htmlのリンクを張って、そこをクリックして、認証ページを介して(<url-pattern>/f.html</url-pattern>)f.htmlに飛ぶようにしていますがこれが問題でしょうか?

補足日時:2006/09/27 19:23
    • good
    • 0

Tomcatで%CATALINA_HOME%\conf\tomcat-users.xml


でロールが
<tomcat-users>
<role rolename="normal"/>
</tomcat-users>
ユーザが
<user username="XXXXX" password="xxxxx" roles="normal"/>

とかになりませんか?
    • good
    • 0
この回答へのお礼

アドバイスをありがとうございます。
>とかになりませんか?
自然に加わるということでしょうか?
それとも、そのように書けばうまくいくかもということでしょうか?

前者であればそうなっていません。

ただ、これはデータベースに登録されたユーザとそのパスワードと権限からアクセスの許可、拒否をするものなので少々違うような気がするのですが・・・。

お礼日時:2006/09/26 23:49

見つかりませんね。


HTTP/1.1 StatusCodeに
Statusコードが4xxのとき ClientErrorで 
「リクエストの構文が間違っているか理解されなかった」とあります。
また

403 Forbidden サーバはリクエストを理解したが
       実行を拒否した。
と「秀和システム本」にありました。
    • good
    • 0
この回答へのお礼

ありがとうございます。
(株)SCCの「Webアプリケーション構築1」を参考にやっているのですが、amazonによると、少々間違えがあるようです。 しかし、今まではWebサイトで解決できましたが、これはできません。
adminユーザはアクセスできるので、根本的に間違っているはずはないと思うのですが・・・

お礼日時:2006/09/26 23:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!