SpringMVC 차단기 상세 설명(자원 및 권한 관리)

8031 단어 springmvc차단기
본 고 는 주로 SpringMVC 차단 기 를 소 개 했 는데 구체 적 으로 다음 과 같다.
1.DispatcherServlet
SpringMVC 는 통 일 된 입구 디 스 패 치 서버 를 가지 고 있 으 며 모든 요청 은 디 스 패 치 서버 를 통 해 이 루어 집 니 다.
Dispatcher Servlet 은 웹.xml 파일 에 설 치 된 사전 컨트롤 러 입 니 다.일치 하 는 요청 을 차단 합 니 다.Servlet 차단 일치 규칙 은 스스로 정의 하고 차단 한 요청 을 특정한 규칙 에 따라 목표 Controller 에 나 누 어 처리 해 야 합 니 다.  그래서 우 리 는 현재 웹.xml 에 다음 설정 을 추가 합 니 다:

<!--     DispatcherServlet ,     web    WEB-INF         [servlet-  ]-servlet.xml   , 
              Beans,           Beans --> 
  <servlet> 
   <servlet-name>springMybatis</servlet-name> 
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
   <load-on-startup>1</load-on-startup> 
  </servlet> 
  <servlet-mapping> 
   <servlet-name>springMybatis</servlet-name> 
   <!--       ,   DispatcherServlet   --> 
   <url-pattern>/</url-pattern> 
  </servlet-mapping> 
 2.정적 자원 차단 하지 않 음
*.do 형식 과 유사 한 url 만 설정 하면 정적 자원 에 대한 접근 은 문제 가 없 지만 모든 요청(예 를 들 어 위 에서 설정 한"/")을 차단 하면 js 파일,css 파일,그림 파일 등 정적 자원 에 접근 할 수 없습니다.
일반적으로 차단 기 를 실현 하 는 것 은 권한 관 리 를 위 한 것 이 고 주로 url 요청 을 차단 하기 때문에 정적 자원 을 차단 하지 않 습 니 다.정적 자원 을 걸 러 내 려 면 보통 두 가지 방법 이 있 습 니 다.
첫 번 째 는를 사용 합 니 다.(일반 웹 응용 서버 의 기본 Servlet 이름 은"default"입 니 다.따라서 Tomcat 의 default Servlet 를 활성화 하여 정적 파일 을 처리 하고 웹.xml 에 다음 코드 를 설정 하면 됩 니 다.)

<!--  servlet tomcat,jetty     ,        /  /static/  ,      http://localhost/foo.css ,  http://localhost/static/foo.css --> 
<!--         --> 
<servlet-mapping> 
  <servlet-name>default</servlet-name> 
  <url-pattern>/js/*</url-pattern> 
  <url-pattern>/css/*</url-pattern> 
  <url-pattern>/images/*</url-pattern> 
  <url-pattern>/fonts/*</url-pattern> 
</servlet-mapping> 
Tomcat, Jetty, JBoss, and GlassFish  기본 Servlet 이름--"default"
Resin 기본 Servlet 이름--"resin-file"
WebLogic 기본 Servlet 이름  -- "FileServlet"
WebSphere  기본 Servlet 의 이름--"Simple FileServlet"
모든 웹 응용 서버 의 기본 Servlet 이름 이"default"가 아니라면 default-servlet-name 속성 을 통 해 지정 해 야 합 니 다.

<mvc:default-servlet-handler default-servlet-name="    Web        Servlet  " /> 
두 번 째 는를 사용 하여 springmvc 설정 파일 에 다음 코드 를 추가 합 니 다.

<mvc:resources mapping="/js/**" location="/static_resources/javascript/"/>  
<mvc:resources mapping="/styles/**" location="/static_resources/css/"/>  
<mvc:resources mapping="/images/**" location="/static_resources/images/"/> 
3.사용자 정의 차단기
SpringMVC 의 차단기 Handler InterceptorAdapter 는 세 개의 preHandle,post Handle,after Complete 방법 을 제공 합 니 다.preHandle 은 비 즈 니스 프로세서 처리 요청 전에 호출 되 었 습 니 다.
post Handle 은 비 즈 니스 프로세서 처리 요청 이 실 행 된 후 보 기 를 만 들 기 전에 실 행 됩 니 다.after Complete 는 Dispatcher Servlet 에서 요청 을 완전히 처리 한 후 호출 되 어 자원 정리 등에 사용 할 수 있 습 니 다.따라서 자신의 권한 관리 논 리 를 실현 하려 면 Handler InterceptorAdapter 를 계승 하고 세 가지 방법 을 다시 써 야 한다.
우선 springmvc.xml 에 자신 이 정의 한 차단 기 를 추가 합 니 다.

  <!--     ,      ,     --> 
<mvc:interceptors>  
  <mvc:interceptor>  
    <!--     url  ,       /**,      Controller --> 
    <mvc:mapping path="/" /> 
    <mvc:mapping path="/user/**" /> 
    <mvc:mapping path="/test/**" /> 
    <bean class="com.alibaba.interceptor.CommonInterceptor"></bean>  
  </mvc:interceptor> 
  <!--          ,      preHandle  ,            postHandle afterCompletion   --> 
</mvc:interceptors> 
나의 차단 논 리 는 로그 인하 지 않 기 전에 모든 방문 url 이 login 페이지 로 이동 하 는 것 입 니 다.로그 인 성공 후 이전 url 로 이동 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.

  /** 
 * 
 */ 
package com.alibaba.interceptor; 
 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 
 
import com.alibaba.util.RequestUtil; 
 
 
/** 
 * @author tfj 
 * 2014-8-1 
 */ 
public class CommonInterceptor extends HandlerInterceptorAdapter{ 
  private final Logger log = LoggerFactory.getLogger(CommonInterceptor.class); 
  public static final String LAST_PAGE = "com.alibaba.lastPage"; 
  /* 
   *                  
   
  private String mappingURL; 
   
  public void setMappingURL(String mappingURL) {   
        this.mappingURL = mappingURL;   
  }  
 */ 
  /** 
   *                 
   *     false 
   *                    afterCompletion(),        
   *     true 
   *          ,              
   *         Controller 
   *          , 
   *                 postHandle() 
   *                    afterCompletion() 
   */  
  @Override  
  public boolean preHandle(HttpServletRequest request,  
      HttpServletResponse response, Object handler) throws Exception {  
    if ("GET".equalsIgnoreCase(request.getMethod())) { 
      RequestUtil.saveRequest(); 
    } 
    log.info("==============    : 1、preHandle================");  
    String requestUri = request.getRequestURI(); 
    String contextPath = request.getContextPath(); 
    String url = requestUri.substring(contextPath.length()); 
    
    log.info("requestUri:"+requestUri);  
    log.info("contextPath:"+contextPath);  
    log.info("url:"+url);  
     
    String username = (String)request.getSession().getAttribute("user");  
    if(username == null){ 
      log.info("Interceptor:   login  !"); 
      request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); 
      return false; 
    }else 
      return true;   
  }  
  
  /** 
   *                ,             
   *   modelAndView     ,       
   */ 
  @Override  
  public void postHandle(HttpServletRequest request,  
      HttpServletResponse response, Object handler,  
      ModelAndView modelAndView) throws Exception {   
    log.info("==============    : 2、postHandle================");  
    if(modelAndView != null){ //        
      modelAndView.addObject("var", "  postHandle");  
    }  
  }  
  
  /** 
   *  DispatcherServlet           ,          
   *  
   *           ,                  afterCompletion() 
   */  
  @Override  
  public void afterCompletion(HttpServletRequest request,  
      HttpServletResponse response, Object handler, Exception ex)  
      throws Exception {  
    log.info("==============    : 3、afterCompletion================");  
  }  
 
}  
주:상기 코드 에 저 는 RequestUtil 을 썼 습 니 다.주로 현재 Request,Session 대상 을 가 져 오고 페이지 를 저장 하고 암호 화 하 며 꺼 내 는 등 기능 을 실현 합 니 다.
이로써 차단 기 는 이미 실현 되 었 습 니 다.효 과 는 그림 과 같 습 니 다.
제 가 직접/test/hello 를 방문 하면 차단 이 됩 니 다.

로그 인 성공 후/test/hello 에 대응 하 는 페이지 로 이동 합 니 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기