[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>
0 件のコメント:
コメントを投稿