[Spring] ログインされていないリクエストの場合、ログイン画面へリダイレクトさせる

2018年7月6日金曜日

Java Spring

t f B! P L

[Spring] ログインされていないリクエストの場合、ログイン画面へリダイレクトさせる

Spring の HandlerInterceptor を使用し、認証が必要なページに
未認証の状態でリクエストした場合、ログイン画面へリダイレクトする実装。

  • Java コード
import java.lang.reflect.Method;

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

import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.pkg.jizen.common.util.SessionManager;


public class AppHandlerInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

  // リクエストを受けるハンドラのクラスを設定
        HandlerMethod hm = (HandlerMethod) handler;
        Method method = hm.getMethod();
        Class<?> cls = method.getDeclaringClass();
        
        // Controller アノテーションがあるクラスのみ処理を行う
        Controller annotation = AnnotationUtils.findAnnotation(cls, Controller.class);
        if (annotation != null) {
            String className = cls.getSimpleName();
            boolean isLogin = true;  //ここで認証済みかのチェックを行う
            if (!isLogin && !"LoginContorller".equals(className)) {
             // 未認証でログインコントローラ以外へのアクセスの場合、ログイン画面へリダイレクト
                response.sendRedirect(request.getContextPath() + "/Login");
                return false;
            }
        }
        // trueであれば通す
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }

}
  • spring-context.xml
<interceptors>
 <interceptor>
  <mapping path="/**" />
  <!-- css/js などのリソースを除外する -->
  <exclude-mapping path="/resources/**"/>
  <beans:bean class="com.sample.app.AppHandlerInterceptor" />
 </interceptor>
</interceptors>
スポンサーリンク

QooQ