Spring Bootでのインターセプター設定:認証ガード実装

Spring Bootでのインターセプター設定(認証ガード)

本記事では、Spring Boot 2.x環境でのインターセプター設定方法、特にログイン認証のガードとしての実装について解説します。

1. インターセプター実装クラスの作成

まず、HandlerInterceptorインターフェースを実装したクラスを作成し、必要なメソッドをオーバーライドして独自のビジネスロジックを実装します。

package com.example.security.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.example.entity.AuthenticatedUser;

/**
 * 認証インターセプター
 */
public class AuthenticationInterceptor implements HandlerInterceptor {

    /**
     * リクエスト処理前に呼び出される(Controllerメソッドの前に実行)
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        try {
            // セッション内に認証済みユーザー情報が存在するか確認
            HttpSession session = request.getSession();
            AuthenticatedUser currentUser = (AuthenticatedUser) session.getAttribute("CURRENT_USER");
            
            if (currentUser != null) {
                return true; // 認証済みの場合は処理を続行
            }
            
            // 未認証の場合はログインページへリダイレクト
            String loginUrl = request.getContextPath() + "/auth/login";
            response.sendRedirect(loginUrl);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false; // 処理を中断
    }

    /**
     * リクエスト処理後に呼び出される(Controllerメソッドの後に実行)
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, 
                          Object handler, ModelAndView modelAndView) {
        // ビュー描画前の処理(必要に応じて実装)
    }

    /**
     * リクエスト完全終了後に呼び出される(リソースクリーンアップ用)
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
                              Object handler, Exception ex) {
        // リソースクリーンアップ処理(必要に応じて実装)
    }
}

2. インターセプター設定クラスの作成

次に、WebMvcConfigurerを継承した設定クラスを作成し、addInterceptorsメソッドをオーバーライドしてインターセプターを登録します。メインクラスには@Configurationアノテーションを付与します。

package com.example.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.example.security.interceptor.AuthenticationInterceptor;

/**
 * セキュリティ設定クラス
 */
@Configuration
public class SecurityConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 認証インターセプターの登録
        registry.addInterceptor(new AuthenticationInterceptor())
                .addPathPatterns("/**")                    // すべてのパスを対象
                .excludePathPatterns(                      // 除外パスの設定
                    "/auth/login",                         // ログインページ
                    "/error",                              // エラーページ
                    "/static/**",                          // 静的リソース
                    "/webjars/**"                          // WebJarsリソース
                );
    }
}

上記設定では、静的リソースやログイン関連のパスがインターセプタ対象から除外されています。実際の要件に応じて除外パスを調整してください。

これでバックエンド側の認証ガード設定は完了です。フロントエンド側で同様の制御を実装する場合は、対応するフレームワークの機能を利用してください。

タグ: Spring Boot インターセプター 認証 セキュリティ WebMvcConfigurer

7月27日 17:53 投稿