이 기사는 주로 SpringMVC, 예제 코드, 구성 및 기타 컨텐츠에서 인터셉터의 도입을 연구합니다.
SpringMVC의 프로세서 인터셉터는 프로세서의 사전 프로세스 및 후 프로세스에 사용되는 Servlet Development의 필터 필터와 유사합니다. 이 기사는 주로 인터셉터가 SpringMVC에서 정의되는 방법과 인터셉터의 실행 및 사용법을 요약합니다.
SpringMVC에서는 인터셉터를 정의하여 핸들러 인터셉터 인터페이스를 구현하고 다음과 같이 인터페이스에 제공된 세 가지 방법을 구현하십시오.
// interceptor1public class handlerinterceptor1 테스트 핸들러 인터셉터 {@override public boolean prehandle (httpservletrequest request, httpservletreponse 응답, 개체 핸들러) 예외 {system.out.out.println ( "handlerinterceptor1 .... 사각형"); true means release return true;}@public void posthandle (httpservletrequest request, httpservletreponse 응답, 객체 처리기, modelandview modelandview)은 예외 {system.out.println ( "handlerinterceptor1..posthandle")}@reveride public void (httpservletrepronst, httppservletreprons 응답, 객체 핸들러, 예외) 예외는 {System.out.println ( "handlerinterceptor1..afterCompletion");}} 던지기이 세 가지 방법에 대한 간단한 분석을하겠습니다.
SpringMVC에서 인터셉터는 특정 핸드 레이핑에 대해 구성됩니다. 즉, 인터셉터가 핸드 링핑에서 구성되면 핸드 레이포를 통해 성공적으로 맵핑 된 핸들러는 인터셉터를 사용합니다. 예를 들어, 구성 파일에서 구성한 맵퍼가 org.springframework.web.servlet.handler.beannameurlhandlermpapping이라고 가정하면 다음과 같이 인터셉터를 구성 할 수 있습니다.
<ean> <속성 이름 = "인터셉터"> <slest> <Ref bean = "handlerinterceptor1"/> <ref bean = "handlerinterceptor2"/> </list> </property> </bean> <bean id = "handlerinterceptor1"/> <bean id = "handlerinterceptor2"/>
SpringMVC에서 글로벌 인터셉터를 구성하는 방법은 무엇입니까? 위에서 언급 한 바와 같이, SpringMVC의 인터셉터는 특정 매퍼를 대상으로합니다. 이 문제를 해결하기 위해 SpringMVC 프레임 워크는 전역에서 유사한 인터셉터를 각 핸드 레이핑에 구성하여 글로벌 인터셉터가 될 수 있습니다. 구성은 다음과 같습니다.
<!-인터셉터 구성-> <mvc : interceptors> <!-순서대로 실행 된 다중 인터셉터-> <mvc : interceptor> <mvc : 매핑 경로 = "/**"/> <!-서브 버너 경로를 포함하여 모든 URL을 가로 채는 것을 나타냅니다-> <bean/> </mvc : intercepor> <mvc : mvc : mvc : mvc : mvc : mvc : mvc : interceptor. 경로 = "/**"/> <bean/> </mvc : interceptor>
일반적 으로이 구성을 사용합니다. <mvc : mapping>에서 가로 채는 URL을 지정합니다.
위의 구성에 따라 두 개의 인터셉터, 핸들러 린terceptor2 및 핸들러 interceptor3을 작성하십시오. 그런 다음 3 개의 인터셉터의 실행을 테스트하고 관련 요약을 할 것입니다.
다시 말해서, 우리는 3 개의 인터셉터의 사전 핸들 방법의 반환 값을 가로 채서 인터셉터의 실행 순서를 테스트하기 위해 true로 변경합니다. 테스트 결과는 다음과 같습니다.
핸들러 interceptor1… .prehandle
핸들러 interceptor2… .prehandle
핸들러 interceptor3… .prehandleHandlerinterceptor3…. Posthandle
Handlerinterceptor2…. Posthandle
Handlerinterceptor1…. Posthandle핸들러 interceptor3…
핸들러 interceptor2…
핸들러 interceptor1…
인쇄 된 결과에 따라 요약이 이루어집니다. 모든 인터셉터가 릴리스되면 사전 핸들 방법은 구성 순서로 실행됩니다. 다른 두 가지 방법은 구성 순서대로 실행됩니다.
우리는 세 번째 인터셉터의 사전 핸들 방법에서 반환 값을 False로 변경하고, 첫 번째는 여전히 사실입니다. 인터셉터의 실행 순서를 테스트합니다. 테스트 결과는 다음과 같습니다.
핸들러 interceptor1… .prehandle
핸들러 interceptor2… .prehandle
핸들러 interceptor3… .prehandle핸들러 interceptor2…
핸들러 interceptor1…
인쇄 된 결과를 기반으로 요약하십시오.
1. 인터셉터 1과 2가 해제되므로 인터셉터 3의 사전 핸들을 실행할 수 있습니다. 다시 말해, 이전 인터셉터를 해제 할 수 있고 후자의 인터셉터는 사전 처리를 실행할 수 있습니다.
2. 인터셉터 3은 그것을 해제하지 않으므로 다른 두 가지 방법이 실행되지 않습니다. 즉, 인터셉터가 해제되지 않으면 다른 두 가지 방법이 실행되지 않습니다.
3. 방출되지 않는 인터셉터가있는 한, 모든 인터셉터의 사후 방법은 실행되지 않지만 사전 핸들이 실행되고 해제되는 한, 차단 방법이 실행됩니다.
실제로 위의 상황을 참조 할 수 있습니다. 특별한 경우입니다. 실행중인 결과를 살펴 보겠습니다.
핸들러 interceptor1… .prehandle
분명히, 첫 번째 인터셉터의 사전 핸들 방법 만 실행되었습니다. 그들 중 어느 것도 풀리지 않았기 때문에, 그들 중 어느 것도 사후 방법과 후회 방법을 실행하지 않았습니다.
예를 들어, 두 번째 경우에서 통합 예외 처리 로직을 작성하려면 인터셉터를 인터셉터 체인의 첫 번째 위치에 배치하고 후속 체인 만 실행되기 때문에 릴리스되어야합니다. 인터셉터 체인의 첫 번째 위치에 배치되면 연합 된 예외 처리의 논리가 실행될 수 있습니다.
예를 들어 인증 인터셉터에 로그인하여 인터셉터 링크의 첫 번째 위치에 배치하십시오 (통합 예외 처리가있는 경우 통합 예외 처리 뒤에 배치해야 함). 권한 검증 인터셉터는 인증 인터셉터에 로그인 한 후 배치됩니다 (로그인 후에 만 허가가 확인되기 때문에).
다음은 SpringMVC의 인터셉터 사용 방법을 설명하기위한 로그인 검증 인터셉터입니다.
먼저, 우리가 가로 채고 싶은 것, 가로 채울 때하고 싶은 일 : 요구 사항을 살펴 보겠습니다. 아이디어는 다음과 같습니다.
1. 사용자 요청 URL
2. 인터셉터는 가로 채기 검증을 수행합니다. 요청 된 URL이 공개 주소 (로그인하지 않고 액세스 할 수있는 URL) 인 경우 해제하십시오.
사용자 세션이 존재하지 않으면 로그인 페이지로 이동하십시오.
사용자 세션이 있으면 해제하고 작업을 계속하십시오.
// @requestmapping ( "/login") 공개 문자열 로그인 (httpservletrequest 요청, 문자열 사용자 이름, 문자열 비밀번호)에 로그인 예외 {// 실제로 데이터베이스 //.../here와 일치해야합니다. //.. "REDIRECT : QueryItems.action";} // login @requestmapping ( "/logout") public string logout (httpservletrequest request)는 예외 {httpsession session = request.getsession (); invalidate (); return "Redirect : QueryItems.action";}를 던집니다. // Test Interceptor 1Public Class LoginInterceptor implements handlerinterceptor {// 핸들러 메소드를 입력하기 전에 실행 // ID 인증 및 ID 인증에 사용될 수 있습니다. 인증이 전달되지 않으면 사용자가 로그인되지 않았 음을 의미합니다.이 메소드는이를 가로 채고 더 이상 실행되지 않아야합니다. 그렇지 않으면, @override public boolean prehandle (httpservletrequest request, httpservletrequest request, httpservletreponse response, 객체 핸들러) 예외가 발생합니다 {// 요청 된 urlstring url = request.getRequesturi (); // direquire가 공개 주소가 공개 주소가 공개 주소를 구성하는지 여부를 구성합니다). 제출 된 주소 if (url.indexof ( "login.action")> 0) {// 로그인 제출이 수행되면 릴리스 return true;} // judge sessionhttpsession session = reture.getSession (); // Session String username = (string) session.getAttribute (username!); 사용자의 신원을 확인 해야하는 경우 로그인 페이지 요청으로 점프해야 함을 나타냅니다. GetRequestDispatcher ( "/web-inf/jsp/login.jsp"). Forward (요청, 응답);} // 공간을 저장하고 다른 두 가지 방법을 생략하고 작성할 필요가 없습니다.그런 다음 인터셉터를 구성합니다.
<!-인터셉터 구성-> <mvc : interceptors> <!-다중 인터셉터, 순서대로 실행-> <mvc : interceptor> <mvc : 맵핑 경로 = "/**"/> <!-서브 url 경로를 포함한 모든 URL을 가로 채기-> <bean/> </mvc : interceptor>-interceptors>-</mvc : interceptors>.
이런 식으로 URL을 요청하면 방금 정의한 인터셉터에 의해 캡처 된 다음 세션에 사용자 정보가 있는지 확인합니다. 그렇지 않은 경우 로그인 페이지로 이동하여 로그인합니다.
<form action = "$ {pagecontext.request.contextPath} /login.action"method "method ="post "> username : <input type ="text "name ="username " /> <br> password : <입력 유형 ="암호 "name ="password " /> <br> <input type ="name = ""제출 " /compon>이것은 기본적으로 인터셉터 사용에 대한 소개입니다.
위는 SpringMVC의 인터셉터에 대한 자세한 설명과 코드 예제에 대한이 기사의 모든 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!