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リソース
);
}
}
上記設定では、静的リソースやログイン関連のパスがインターセプタ対象から除外されています。実際の要件に応じて除外パスを調整してください。
これでバックエンド側の認証ガード設定は完了です。フロントエンド側で同様の制御を実装する場合は、対応するフレームワークの機能を利用してください。