>  기사  >  Java  >  Spring+SpringMVC+MyBatis 심층 학습 및 구성(17) - SpringMVC 인터셉터

Spring+SpringMVC+MyBatis 심층 학습 및 구성(17) - SpringMVC 인터셉터

PHP中文网
PHP中文网원래의
2017-07-03 17:30:261405검색

재인쇄시 출처를 꼭 밝혀주세요:

앞서 언급했듯이: Spring+SpringMVC+MyBatis 심층 학습 및 구성(16) - SpringMVC 주석 개발(고급)

1.인터셉터 정의

Spring Web MVC의 프로세서 인터셉터는 프로세서를 전처리하고 후처리하는 데 사용되는 서블릿 개발의 필터와 유사합니다.

인터셉터를 정의하고 HandlerInterceptor 인터페이스를 구현합니다. 인터페이스에는 세 가지 방법이 제공됩니다.

으아악

2.인터셉터 구성

스트럿츠에는 대형 인터셉터 체인이 있는 것이 일반적입니다. 어떤 액션 링크에든 추가하여 인터셉트할 수 있습니다. 그러나 스프링의 인터셉터는 전역적이지 않습니다.

2.1 특정 매핑에 대한 인터셉터 구성

springmvc 인터셉터는 HandlerMapping에 대한 차단 설정을 설정합니다. HandlerMapping에 차단이 설정된 경우 HandlerMapping에 의해 성공적으로 매핑된 핸들러는 결국 인터셉터를 사용하게 됩니다.

으아악

일반적으로 권장되지 않습니다.

2.2 모든 매핑에 대해 전역 인터셉터 구성

springmvc는 전역 유사 인터셉터를 구성할 수 있으며 springmvc 프레임워크는 구성된 전역 유사 인터셉터를 각 HandlerMapping에 주입합니다.

으아악

3.감청 테스트

3.1 테스트 요구 사항

다중 인터셉터의 각 메서드 실행 타이밍을 테스트합니다.

3.2두 개의 인터셉터 작성

3.3 두 요격기가 모두 출시되었습니다

실행 로그 정보:

으아악

요약:

preHandle 메소드는 순서대로 실행되고, postHandle과 afterCompletion은 인터셉터 구성의 역순으로 실행됩니다.

3.4 인터셉터 1은 허용되고, 인터셉터 2는 허용되지 않습니다

실행 로그 정보:

으아악

요약:

인터셉터 2의 preHandle은 인터셉터 1이 해제된 후에만 실행됩니다.

인터셉터 2의 preHandle은 해제되지 않으며, 인터셉터 2의 postHandle과 afterCompletion은 실행되지 않습니다.

해제되지 않는 인터셉터가 있는 한 postHandle은 실행되지 않습니다.

3.5 인터셉터 1은 불가, 인터셉터 2는 불가

실행 로그 정보:

으아악

인셉터 1의 preHandle은 해제되지 않으며, postHandle과 afterCompletion은 실행되지 않습니다.

인터셉터 1의 preHandle이 해제되지 않고, 인터셉터 2도 실행되지 않습니다.

4. 요약

테스트 결과에 따라 인터셉터를 적용해 보세요.

예: 통합 로그 처리 인터셉터, 인터셉터 preHandle을 변경해야 하는 경우 이를 해제하고 인터셉터 체인의 첫 번째 위치에 배치해야 합니다.

예: 로그인 인증 인터셉터는 인터셉터 체인의 첫 번째 위치에 배치됩니다. 권한 확인 인터셉터는 로그인 인터셉터 뒤에 배치됩니다. (로그인 통과 후 권한을 확인하기 때문에)

5. 인터셉터 애플리케이션(로그인 인증 구현)

5.1 요구사항

(1) 사용자 요청 URL

(2) 인터셉터는 차단 검증을 수행합니다

요청한 URL이 공개주소(로그인하지 않고도 접속 가능한 URL)인 경우에는 그대로 통과시켜주세요

 사용자 세션이 존재하지 않는 경우 로그인 페이지로 이동합니다.

 사용자 세션이 존재하면 이를 해제하고 작업을 계속합니다.

5.2 로그인 및 종료 컨트롤러 방법

으아악

5.3 로그인 인증 차단 구현

5.3.1LoginInterceptor

으아악

5.3.2 인터셉터 구성

classpath 아래 springmvc.xml의 구성:

이 글이 도움이 되셨다면 위챗으로 알려주세요~

위 내용은 Spring+SpringMVC+MyBatis 심층 학습 및 구성(17) - SpringMVC 인터셉터의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.