HTTP ステータス 403 (要求されたリソースへのアクセスが拒否されました) は、間違った資格情報を入力しすぎたか、構成に問題があることを示している可能性があります。
考えられる問題の 1 つは、ブラウザーに認証資格情報がキャッシュされている可能性があることです。これは、BASIC 認証を使用すると、ブラウザーはサイトへの初回認証時にのみ資格情報の入力を求められるためです。認証が成功すると、再度プロンプトが表示されることはなく、ブラウザーに再度プロンプトを表示するよう強制するため、ブラウザーを完全に閉じる (または別の Web ブラウザーで試す) 必要がある場合があります。
構成ファイルを変更していない場合はconf/tomcat-users.xml
、インストール内のファイルを調べてください ( locate tomcat-users.xml
)。そのファイルには、Tomcat webapp を使用できるようにする資格情報が含まれている必要があります。
たとえば、manager-gui ロールをtomcat
、パスワードがという名前のユーザーs3cret
に追加するには、上記の設定ファイルに次を追加します。
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
次に、webapps マネージャーにアクセスできます/manager/html
(例: 構成変更後のリロード)。
続きを読む:マネージャー アプリのハウツー
独自のセキュリティ制約を ( で) 実装しようとしている場合はweb.xml
、次の例を試してください (終了する前に追加してください</web-app>
)。
<!-- This security constraint protects your webapp interface. -->
<login-config>
<!-- Define the Login Configuration -->
<auth-method>BASIC</auth-method>
<realm-name>Webapp</realm-name>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
<!-- Specifying a Secure Connection -->
<user-data-constraint>
<!-- transport-guarantee can be CONFIDENTIAL (forced SSL), INTEGRAL, or NONE -->
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- Authorization, see: tomcat-users.xml -->
<security-role>
<role-name>*</role-name>
</security-role>
login-config 要素には、auth-method
使用する認証方法を指定する要素が含まれていますBASIC
。要素には、 、、およびの 3 つのsecurity-constraint
要素が含まれます。web-resource-collection は、認証が必要なアプリケーションの部分を指定します。は、アプリケーション全体で認証が必要であることを示します。auth-constraint は、保護されたリソースにアクセスするためにユーザーが持つ必要がある役割を指定します。user-data-constraint の transport-guarantee は、またはです。に設定しました。これは、保護されたリソースにアクセスしようとしたときに へのリダイレクトが不要であることを意味します。web-resource-collection
auth-constraint
user-data-constraint
/*
NONE
CONFIDENTIAL
INTEGRAL
NONE
SSL
また、次の行があることを確認してください。
<Realm className="org.apache.catalina.realm.MemoryRealm" />
あなたのconf/server.xml
(Engine
セクション内)。
それでも問題が解決しない場合は、次を試してください。
- 正しい XML ファイルを編集しているかどうかを確認します。
- XML ファイルを検証し
catalina.sh configtest
ますxmlstarlet val /etc/tomcat?/*.xml /var/lib/tomcat7/webapps/*/WEB-INF/*.xml
。
- あなたの
<url-pattern>
一致<security-constraint>
またはに設定/*
,
- Tomcat のログを確認してください (例:
/var/log/tomcat7
)。
- または(INFO、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST、または ALL) でログレベル(
INFO
-> FINE
/ FINEST
) を上げ、Tomat を再起動してログを確認します。logging.properties
log4j.properties
- ログに何もない場合は、正しいログをチェックしているかどうかを確認してください (
sudo lsof | grep -E "java.*(out|txt|log)$"
、tail -f /var/log/tomcat7/*.log /var/log/tomcat7/*.txt /var/log/tomcat7/*.out
)、
log4j
ロギング システムを使用する場合は、libs を適切なフォルダに配置して構成することにより、適切に初期化されていることを確認してください。log4j.properties
cURL で BASIC 認証をテストします。
資格情報なし:
$ curl -vv http://example.com:8983/solr/
通常、リクエストはHTTP/1.1 401 Unauthorizedを返し、" WWW-Authenticate " ヘッダーは基本認証が必要であることを示します。
資格情報を使用:
$ curl -vv -u tomcat:tomcat http://example.com:8983/solr/
リクエストは「Authorization」ヘッダーを付けて送信し、認証する必要があります。資格情報が無効な場合は、HTTP/1.1 401 Unauthorizedを取得する必要があります。ユーザーが認証されているが、リソースを表示するアクセス権がない場合、取得する必要があるのはHTTP/1.1 403 Forbiddenです。
認証試行の失敗が多すぎるため、ユーザー ロックアウト メカニズムがアクティブ化されている可能性があります( LockOutRealm )。
Tomcat を手動で停止して実行します (: と同じ方法でps wuax | grep ^tomcat
)。例:
# ps wuax | grep ^tomcat
tomcat7 884 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties ... org.apache.catalina.startup.Bootstrap start
$ /etc/init.d/tomcat7 stop
$ sudo sudo -u tomcat7 /usr/lib/jvm/java-7-openjdk-amd64/bin/java ... -Dorg.apache.catalina.level=FINEST org.apache.catalina.startup.Bootstrap start
catalina.sh
または、次のようなスクリプトを使用して開始します。
$ . /etc/default/tomcat7
$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 CATALINA_HOME=/usr/share/tomcat7 CATALINA_BASE=/var/lib/tomcat7 CATALINA_PID=/var/run/tomcat7.pid CATALINA_TMPDIR=/tmp LOGGING_CONFIG="-Dorg.apache.catalina.level=FINEST"
$ /usr/share/tomcat7/bin/catalina.sh run
またはデバッグモードで:
$ JPDA_SUSPEND=y catalina.sh jpda start
catalina.out
ログを確認してください。
最後の手段は、次の方法でプロセスをデバッグすることですsudo strace -fp PID
。