ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
エラーの状況
# Tomcat 標準 403 ページ
HTTP Status 403 - 要求されたリソースへのアクセスが拒否されました
# 英語版
HTTP Status 403 - Access to the requested resource has been denied
# Manager App のリモートアクセス
403 Access Denied
You are not authorized to view this page.
主な原因と対処
原因 1: directory listing 無効
Tomcat のデフォルトでは、ディレクトリ一覧表示が無効です:
# webapps/myapp/static/ にアクセス (index.html がない)
http://localhost:8080/myapp/static/
# → 403
# 対処 1: index.html / index.jsp を配置
echo "<h1>Static</h1>" > webapps/myapp/static/index.html
# 対処 2: directory listing を有効化 (開発用、本番非推奨)
# conf/web.xml の DefaultServlet 設定
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value> <!-- ← true に変更 -->
</init-param>
</servlet>
原因 2: web.xml の security-constraint
<!-- WEB-INF/web.xml に認証必須設定 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
# 対処
# - 該当ロールでログイン
# - URL パターンを再確認
# - 不要なら制約を削除
原因 3: ファイル / フォルダの OS 権限
# Linux で webapps の所有者
$ ls -la /opt/tomcat/webapps/myapp
drwxr-x--- 5 root root 4096 May 15 12:00 .
# → tomcat ユーザが読めない
# 対処
$ sudo chown -R tomcat:tomcat /opt/tomcat/webapps/myapp
$ sudo chmod -R 755 /opt/tomcat/webapps/myapp
原因 4: Manager App / Host Manager の IP 制限
# webapps/manager/META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
# → 127.x.x.x と ::1 (localhost) からのみ許可
# リモートからは 403
# 対処 1: 許可 IP を追加 (社内 IP 等)
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.1\.\d+" />
# 対処 2: SSH トンネル経由でアクセス
$ ssh -L 8080:localhost:8080 user@tomcat-server
# ローカルから http://localhost:8080/manager/html
原因 5: 認証情報なしで認証必須リソース
# Manager App は basic 認証
# tomcat-users.xml にユーザ登録が必要
# conf/tomcat-users.xml
<role rolename="manager-gui"/>
<user username="admin"
password="secret"
roles="manager-gui"/>
# Tomcat 再起動 → ブラウザで認証ダイアログ → 入力
原因 6: HTTPS リダイレクトミス
<!-- HTTPS 強制 (HSTS 設定等) -->
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPS Only</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
# HTTP でアクセスすると HTTPS にリダイレクト
# HTTPS が設定されていないと 403
調査の流れ
- URL を確認: ディレクトリ or ファイル?
- Tomcat ログ確認:
logs/localhost_access_log.YYYY-MM-DD.txt - web.xml 確認: security-constraint があるか
- OS 権限確認:
ls -la - context.xml 確認: RemoteAddrValve の制限
- 認証必要か: 401 と区別
403 vs 401 の違い
| コード | 意味 | 例 |
|---|---|---|
| 401 Unauthorized | 未認証 (認証必要) | ログインしていない |
| 403 Forbidden | 認証済だが権限なし | 一般ユーザが管理画面 |
Spring Security での 403
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/api/**").authenticated()
.anyRequest().permitAll()
)
.exceptionHandling(ex -> ex
.accessDeniedHandler((request, response, accessDeniedException) -> {
response.setStatus(403);
response.getWriter().write("Access Denied: " + accessDeniedException.getMessage());
})
);
return http.build();
}
}
// アクセス拒否ページ
@Controller
public class ErrorController {
@GetMapping("/access-denied")
public String accessDenied() {
return "errors/403";
}
}
nginx の 403
# nginx が返す 403
# - location ブロックで deny
# - root ディレクトリの権限不足
# - directory listing 無効でディレクトリアクセス
# 対処
location / {
autoindex on; # ディレクトリ一覧
}
location /admin {
allow 192.168.1.0/24;
deny all;
}
# 権限
$ sudo chown -R www-data:www-data /var/www/html
$ sudo chmod -R 755 /var/www/html
関連エラー
401 Unauthorized: 認証必要403 Forbidden: このページ (認証済だが権限なし)404 Not Found: リソース未存在405 Method Not Allowed: HTTP メソッド不一致
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?