SpringMVCログイン検証無から有へ
4511 ワード
最近ずっとjavaWebを勉强していて、自分でプロジェクトを书いて练习してみましたが、今日はログイン検証机能を実现して、整理してノートを作りました.
この機能を実現するには、次の2つの方法があります.サーブレットフィルタFilter SpringMVCブロッキング 私がプロジェクトで使っているのは2つ目の方法で実現しています.
1.Interceptorブロッキングの作成は、 を実現することによって実現する. を継承することによっては、 を実現することによって実現する.
1.1 HandlerInterceptorインタフェースの実装
くだらないことは言わないで,直接コードをつけなさい.
1.2 HandlerInterceptorAdapter抽象クラスの継承
1.3 WebRequestInterceptorインタフェースの実装
SpringMVCブロッキングの3つの実現方法をまとめた.万変はその中から離れず,要求の3段階に対してブロックし,対応する操作を行う.ログイン認証機能を実装する場合、preHandle()メソッドを処理するだけでよいため、リソースデータの準備に使用されるため、3つ目の方法は望ましくない.
2.spring-mvcのxmlプロファイルでブロッカーを構成する
ダイレクトコード
構成コードは分かりやすいが、マッピングパスは、
SpringMVCブロッキングによりログインブロッキング機能を非常に容易に実現できます.以上がすべての実装コードですが、2つの問題があり、紙面の都合で別の文章を書いて記録します.
この機能を実現するには、次の2つの方法があります.
1.Interceptorブロッキングの作成
HandlerInterceptor
インターフェースHandlerInterceptorAdapter
抽象クラスWebRequestInterceptor
インターフェース1.1 HandlerInterceptorインタフェースの実装
くだらないことは言わないで,直接コードをつけなさい.
/**
*
* Created by LiuZongRui on 17/2/20.
*/
public class LoginInterceptor implements HandlerInterceptor {
/**
* Controller ,return false
*/
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
// url
String url = httpServletRequest.getRequestURI();
if (StringUtils.equals(url, "/console/login.do")) {
// ,
return true;
} else {
HttpSession session = httpServletRequest.getSession();
User user = (User) session.getAttribute(Constans.USER);
if (user != null) {
return true;
}
}
//
//
httpServletResponse.sendRedirect("/console/login.do");
return false;
}
/**
* Controller ,ModelAndView
*/
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
/**
* ModelAndView ,
*/
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
1.2 HandlerInterceptorAdapter抽象クラスの継承
/**
* HandlerInterceptorAdapter , HandlerInterceptor ,
* , 。
*/
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
super.preHandle(request, response, handler);
return false;
}
}
1.3 WebRequestInterceptorインタフェースの実装
public class LoginWebInterceptor implements WebRequestInterceptor {
/**
* , , WebRequest 。
* HandlerInterceptor preHandle , 。
*/
public void preHandle(WebRequest webRequest) throws Exception {
// request , request
request.setAttribute("request", "request", WebRequest.SCOPE_REQUEST);
// session , ,
request.setAttribute("session", "session", WebRequest.SCOPE_SESSION);
// , ,
request.setAttribute("globalSession", "globalSession", WebRequest.SCOPE_GLOBAL_SESSION);
}
/**
* Controller , ,ModelMap Controller Model ,
* ModelMap , 。
*/
public void postHandle(WebRequest webRequest, ModelMap modelMap) throws Exception {
}
public void afterCompletion(WebRequest webRequest, Exception e) throws Exception {
}
}
SpringMVCブロッキングの3つの実現方法をまとめた.万変はその中から離れず,要求の3段階に対してブロックし,対応する操作を行う.ログイン認証機能を実装する場合、preHandle()メソッドを処理するだけでよいため、リソースデータの準備に使用されるため、3つ目の方法は望ましくない.
2.spring-mvcのxmlプロファイルでブロッカーを構成する
ダイレクトコード
構成コードは分かりやすいが、マッピングパスは、
というすべてのリクエストに一致するのではなく、ルートディレクトリを表す第1レベルのリクエストである.リクエストパスが:http://localhost:8080/project/path1
であれば、上記の構成でブロックでき、リクエストパスが:http://localhost:8080/project/path1/path2
であれば、上記の構成ではブロックできない.構成を変更する必要がある.
をブロックしたいが、http://localhost:8080/project/path1/path2
をブロックしたくない場合は、http://localhost:8080/project/path2/path1
として構成することができる.SpringMVCブロッキングによりログインブロッキング機能を非常に容易に実現できます.以上がすべての実装コードですが、2つの問題があり、紙面の都合で別の文章を書いて記録します.