Spring - 차단기, 문자 인 코딩 필터

6658 단어 Spring
1. SpringMVC 의 Interceptor
1.1. 연습 목표
홈 페이지 에 표 시 된 '사용자 이름' 위치 에 하이퍼링크 를 추가 하고 클릭 하면 '개인 센터' 에 들 어 갑 니 다./user/info.do 경 로 를 통 해 '개인 정보' 페이지 를 표시 할 수 있 으 며, 이 페이지 는 로그 인 후에 야 접근 할 수 있 습 니 다.
1.2. 문제 분석
한 항목 에서 대부분의 기능 은 로그 인 후에 사용 할 수 있 습 니 다. 그러나 이러한 기능 의 처리 에서 모두 실행 해 야 할 수도 있 습 니 다.
//   Session    username
if (session.getAttribute("username") == null) {
    //   ,        ,        
    return "redirect:login.do";
}

그리고 상기 코드 를 대량으로 복사 하고 붙 이 는 방법 은 분명 바람 직 하지 않다!
1.3. 해결 방안
차단기 (Interceptor) 는 SpringMVC 의 구성 요소 입 니 다. DispatcherServlet 이후, 각각 Controller 이전에 실행 되 는 구성 요소 입 니 다. 또한 실행 할 때 차단 이나 실행 을 선택 할 수 있 으 면 일부 요청 이 처리 되 거나 처리 되 지 않 을 수 있 습 니 다!그리고 차단 기 는 각각 Controller 요청 을 처리 한 후에 도 실 행 될 수 있다.
차단기 와 같은 특징 을 바탕 으로 항목 에 '로그 인 차단기' 를 추가 하여 로그 인 을 요구 하 는 요청 이 모두 '로그 인 차단기' 를 거 쳐 판단 할 수 있 으 며, '로그 인 차단기' 에 서 는 세 션 이 효과 가 있 는 지, 효과 가 있 으 면 놓 고, 효과 적 인 세 션 이 없 으 면 직접 차단 하고 로그 인 페이지 로 재 설정 할 수 있 습 니 다.
1.4. 사용 방식
1.4.1. 차단기 만 들 기
모든 사용자 정의 차단 기 는 HandlerInterceptor 인 터 페 이 스 를 실현 해 야 하기 때문에 프로젝트 에 cn.huang.spring.interceptor.LoginInterceptor 를 만 들 고 실현 HandlerInterceptor:
public class LoginInterceptor 
    implements HandlerInterceptor {

    public boolean preHandle(
            HttpServletRequest request, 
            HttpServletResponse response, 
            Object handler)
            throws Exception {
        System.out.println("LoginInterceptor.preHandle()");
        return false;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("LoginInterceptor.postHandle()");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("LoginInterceptor.afterCompletion()");
    }

}

1.4.2. 차단기 설정springmvc.xml 에 차단기 설정 추가:


    
    
        
        
        
        
        
    


1.4.3. 실행 효과
상기 차단 경 로 를 방문 하려 고 시도 할 때 차단기 의 preHandle() 방법 이 실행 되 고 인터페이스 에 공백 이 표시 되 며 차단기 경로 가 정상적으로 접근 할 수 있 으 며 차단기 의 어떤 방법 도 실행 되 지 않 았 습 니 다.
1.4.4. 로그 인 차단 보완
컨트롤 러 에서 로그 인 에 성공 하면 Session 에 사용자 이름 을 넣 고 저장 할 때 사용 하 는 이름 은 username 이 므 로 로그 인 여 부 를 판단 하 는 것 은 Session 이 username 라 는 값 인지 확인 하 는 것 입 니 다. 값 이 존재 하 는 경우 로그 인 했 고 값 이 존재 하지 않 으 면 로그 인 하지 않 았 기 때문에 차단기 preHandle() 방법 에서:
public boolean preHandle(
        HttpServletRequest request, 
        HttpServletResponse response, 
        Object handler)
        throws Exception {
    System.out.println("LoginInterceptor.preHandle()");
    //   Session
    HttpSession session
        = request.getSession();
    //   session        
    if (session.getAttribute("username") == null) {
        //       , :       
        response.sendRedirect("../user/login.do");
        //     
        return false;
    } else {
        //      , :      ,    
        return true;
    }
}

1.4.5. 차단기 의 더 많은 설정
차단 기 를 설정 할 때 를 사용 하면 어떤 경 로 를 차단 할 수 있 는 지 설정 할 수 있 습 니 다. 같은 차단기 설정 에 여러 개의 노드 가 있 을 수 있 습 니 다.
차단 경 로 를 설정 할 때 * 를 마스크 로 사용 할 수 있 습 니 다. 예 를 들 어:
 

상기 설정 은 차단 /user 아래 의 모든 경 로 를 표시 합 니 다. 예 를 들 어 /user/login.do, /user/reg.do, /user/handler_login.do, /user/handler_reg.do, /user/inf.do 등 입 니 다.
1 개의 별표 * 를 사용 하면 1 층 경로 만 연결 할 수 있 습 니 다. 즉, 상기 설정 은 /user/info/change.do 과 같은 경로 에 작용 하지 않 습 니 다!경 로 를 무시 하 는 등급 이 필요 하 다 면 2 개의 별표 * 를 사용 해 야 합 니 다. 즉, 설정 은:


상기 설정 을 사용 하면 예 를 들 어 /user/login.do, /user/info/change.do, /user/info/change/password.do 등에 사용 할 수 있 습 니 다.
마스크 에 사용 한 후 차단 범위 가 너무 클 수 있 으 므 로 노드 를 사용 하여 예 외 를 설정 할 수 있 습 니 다.

    
    
    

    
    
    
    
    

    
    


이러한 예 외 는 일반적으로 화이트 리스트, 즉 차단기 가 이러한 경로 에 대한 요 구 를 전혀 받 아들 이지 않 는 다 는 것 으로 이해 할 수 있다.
메모: 이상 설정 은 차단 경 로 를 설정 하고 예 외 를 설정 해 야 합 니 다. 마지막 으로 차단 기 류 를 설정 해 야 합 니 다.
2. 문자 인 코딩 필터
SpringMVC 프레임 워 크 를 사용 할 때 기본 값 은 중국 어 를 지원 하지 않 습 니 다. 중국 어 를 지원 하기 위해 서 는 request.setCharacterEncoding("utf-8") 와 같은 문법 으로 사용 할 문자 인 코딩 을 지정 해 야 합 니 다!
이 임 무 는 컨트롤 러 Controller 에서 수행 할 수 없습니다. 지정 한 인 코딩 은 Servlet 또는 그 전에 실행 해 야 하기 때 문 입 니 다. Servlet 까지 실행 되 었 을 때 이미 어 지 러 워 졌 고 컨트롤 러 에서 다시 조정 하면 이미 늦 었 습 니 다!스프링 MVC 차단 기 를 통 해 인 코딩 조정 이 불가능 하 다 는 뜻 이다!
솔 루 션 은 SpringMVC 프레임 워 크 에서 자체 적 으로 가 져 온 CharacterEncodingFilter 클래스 를 사용 합 니 다. 이 클래스 는 하나의 필터 클래스 로 모든 Servlet 이전에 실행 되 기 때문에 필 터 를 통 해 인 코딩 을 지정 한 후 모든 Servlet 및 후속 절차 에 적 용 됩 니 다!
이 클래스 는 사용 할 인 코딩 을 명확 하 게 지정 하지 않 았 기 때문에 설정 할 때 사용 할 인 코딩 을 초기 화해 야 합 니 다!
구체 적 인 설정 은 web.xml 에 추 가 됩 니 다.


    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        utf-8
    



    CharacterEncodingFilter
    /*

좋은 웹페이지 즐겨찾기