3.

要求されたリソースへのアクセスが拒否されました

編集
この記事の要点
  • 403 Forbidden: 要求されたリソースへのアクセスが拒否されました は Tomcat の権限関連エラー
  • 原因 ①: directory listing 無効でディレクトリにアクセス
  • 原因 ②: web.xml の security-constraintでブロック
  • 原因 ③: ファイル / フォルダの OS 権限不足
  • 原因 ④: Manager App 等の管理画面でRemoteAddrValveで IP 制限

 

エラーの状況

# 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 "

Static

" > webapps/myapp/static/index.html # 対処 2: directory listing を有効化 (開発用、本番非推奨) # conf/web.xml の DefaultServlet 設定 default org.apache.catalina.servlets.DefaultServlet listings true

原因 2: web.xml の security-constraint



    
        Protected
        /admin/*
    
    
        admin
    


# 対処
# - 該当ロールでログイン
# - 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

# → 127.x.x.x と ::1 (localhost) からのみ許可

# リモートからは 403

# 対処 1: 許可 IP を追加 (社内 IP 等)


# 対処 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



# Tomcat 再起動 → ブラウザで認証ダイアログ → 入力

原因 6: HTTPS リダイレクトミス



    
        HTTPS Only
        /*
    
    
        CONFIDENTIAL
    


# HTTP でアクセスすると HTTPS にリダイレクト
# HTTPS が設定されていないと 403

調査の流れ

  1. URL を確認: ディレクトリ or ファイル?
  2. Tomcat ログ確認: logs/localhost_access_log.YYYY-MM-DD.txt
  3. web.xml 確認: security-constraint があるか
  4. OS 権限確認: ls -la
  5. context.xml 確認: RemoteAddrValve の制限
  6. 認証必要か: 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 メソッド不一致

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした。org.apache.tomcat.InstanceManager のクラス・ファイルが見つかりません。ビルド・パスを修正してから、プロジェクトの取り消しおよび再ビルドを行ってください。
  2. 型 org.apache.tomcat.InstanceManager を解決できません。必要な .class ファイルから間接的に参照されています
  3. 要求されたリソースへのアクセスが拒否されました