SpringMVC의 인터셉터 인터셉터도 매우 중요하고 유용합니다. 주요 기능은 사용자 요청을 가로 채고 해당 처리를 수행하는 것입니다. 예를 들어, 권한 확인을 수행하거나 사용자가 로그인되었는지 여부를 결정하거나 현재 시간이 12306과 같은 티켓 구매 시간인지 결정할 수 있습니다.
1. 인터셉터 구현 클래스를 정의합니다
SpringMVC의 인터셉터 인터셉트 요청은 핸들러 인터셉터를 통해 구현됩니다. SpringMVC에서 인터셉터를 정의하는 것은 매우 간단합니다. 두 가지 주요 방법이 있습니다. 첫 번째 방법은 스프링 핸들러 인터셉터 인터페이스를 구현하는 인터셉터 클래스를 정의하는 것입니다. 또는이 클래스는 스프링이 스프링에 의해 이미 제공되는 핸들러 인터셉터 인터페이스를 구현하는 스프링이 제공 한 초록 클래스와 같은 핸들러 인터셉터 인터페이스를 구현하는 클래스를 상속하는 것입니다. 두 번째 방법은 Spring WebRequestinterceptor 인터페이스를 구현하거나 WebRequestinterceptor 인터페이스를 구현하는 클래스를 상속하는 것입니다.
(i) 핸들러 인터셉터 인터페이스 구현
핸들러 인터셉터 인터페이스에는 세 가지 방법이 정의되어 있으며이 세 가지 방법을 사용하여 사용자 요청을 가로 채립니다.
(1) 사전 처리 (httpservletrequest request, httpservletresponse 응답, 객체 핸들) 메소드는 이름에서 알 수 있듯이 요청이 처리되기 전에 호출됩니다. SpringMVC의 인터셉터는 체인 형태로 호출됩니다. 응용 프로그램 또는 요청에 여러 개의 인터셉터가 동시에 존재할 수 있습니다. 각 인터셉터 호출은 선언 순서에 따라 순서대로 실행되며, 첫 번째 호출은 인터셉터에서 사전 처리 방법이 실행되므로 일부 초기화 작업 이이 방법에서 또는 현재 요청의 사전 처리 또는 일부 판단을 결정하여 요청이 계속되어야하는지 여부를 결정할 수 있습니다.
이 방법의 반환 값은 부울 유형 부울입니다. False로 돌아 오면 요청이 종료되고 후속 인터셉터 및 컨트롤러가 다시 실행되지 않음을 의미합니다. 반환 값이 참이면, 다음 인터셉터의 사전 핸들 방법이 계속 호출됩니다. 이미 마지막 인터셉터 인 경우 현재 요청의 컨트롤러 메소드가 호출됩니다.
(2) posthandle (httpservletrequest 요청, httpservletresponse 응답, 객체 핸들, ModelandView ModelAndView) 메소드. 사전 핸들 방법의 설명으로부터, 우리는 나중에 언급 할 후 정수 방법을 포함 하여이 방법이 현재 인터셉터의 사전 핸들 메소드의 반환 값이 참을 때만 호출 될 수 있음을 알고 있습니다.
이름에서 알 수 있듯이 Posthandle 메소드는 현재 요청이 처리 된 후, 즉 컨트롤러 메소드가 호출 된 후에 실행되지만 DispatcherserVlet이 뷰를 반환하고 렌더링하기 전에 호출 되므로이 방법에서 컨트롤러 프로세스 후에 ModelAndView 객체에서 작동 할 수 있습니다. 사후 방법의 호출 방향은 사전 핸들의 반대이며, 이는 인터셉터의 사후 방법이 나중에 실행될 것이며, 이는 Struts2에서 인터셉터의 실행 프로세스와 다소 유사하다는 것을 의미합니다. struts2에서 인터셉터의 실행 프로세스도 묶여 있지만, struts2에서는 다음 인터셉터 또는 동작으로 호출을 트리거하기 위해 ActionInvocation의 호출 방법을 수동으로 호출해야합니다. 그런 다음 호출 방법이 선언 된 순서로 실행되기 전에 각 인터셉터의 내용이 실행되고 호출 메소드 후 컨텐츠가 반전됩니다.
(3) Aourcompletion (httpservletrequest 요청, httpservletresponse 응답, 객체 핸들, 예외) 메소드 방법,이 메소드는 현재 해당 인터셉터의 사전 처리 메소드의 반환 값이 사실 일 때 실행해야합니다. 이름에서 알 수 있듯이이 방법은 전체 요청이 완료된 후, 즉 Dispatcherservlet이 해당보기를 렌더링 한 후에 실행됩니다. 이 방법의 주요 기능은 자원을 정리하는 것입니다.
간단한 코드 설명은 다음과 같습니다.
import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; org.springframework.web.servlet.handlerinterceptor import; org.springframework.web.servlet.modelandview import; 공개 클래스 SpringMvcinterceptor는 핸들러 인터셉터를 구현합니다. { /*** 사전 핸들 방법은 프로세서 차단에 사용됩니다. 이름에서 알 수 있듯이이 방법은 컨트롤러 프로세스 전에 호출됩니다. SpringMVC의 인터셉터 인터셉터는 묶여 있으며, 다중 인터셉터가 동시에 존재할 수 있습니다. 그런 다음 SpringMVC는 선언 순서에 따라 하나씩 하나씩 실행되며 컨트롤러 메소드가 호출되기 전에 인터셉터의 모든 사전 처리 방법이 호출됩니다. SpringMVC의 인터셉터 체인 구조도 중단 될 수 있습니다. 이 인터럽트 메소드는 사전 핸들의 반환 값을 false로 만듭니다. 사전 핸들의 반환 값이 False 인 경우 전체 요청이 종료됩니다. */ @override public boolean prehandle (httpservletrequest request, httpservletreponse 응답, 객체 핸들러) 예외 {// todo 자동 생성 메소드 스터브 return false; } /***이 메소드는 인터셉터의 사전 처리 방법의 현재 반환 값이 참일 때만 실행됩니다. Posthandle은 프로세서 차단에 사용됩니다. 실행 시간은 프로세서가 처리 된 후*, 즉 컨트롤러 메소드가 호출 된 후에 이루어 지지만 DispatcherserVlet이보기를 렌더링하기 전에 실행 되므로이 메소드에서 ModelAndView*를 작동 할 수 있습니다. 이 방법의 체인 구조는 정상 액세스 방향과 반대입니다. 즉, 먼저 선언 된 방법은 나중에 호출됩니다. 이것은 Struts2에서 인터셉터의 실행 프로세스와 약간 유사합니다. * struts2의 인터셉트 메소드에서만 actureinvocation의 호출 방법을 수동으로 호출해야합니다. Struts2에서 ActionInvocation의 호출 방법은 다음 인터셉터 *를 호출하거나 동작을 호출하는 것입니다. 그런 다음 호출하기 전에 인터셉터를 작성하기 전에 호출 해야하는 내용물과 호출 후 호출 후 호출 해야하는 내용은 호출 방법으로 작성됩니다. * / @override public void posthandle (httpservletrequest 요청, httpservletreponse 응답, 객체 핸들러, ModelAndView ModelandView)은 예외를 {// TODO 자동 생성 된 메소드 스텁} / ***에 해당 인터셉터의 프리 핸들 방법의 반환 값을 실행해야합니다. 이 방법은 전체 요청이 완료된 후에 실행됩니다. *이 방법의 주요 기능은 자원을 정리하는 것입니다. 물론,이 방법은 인터셉터의 사전 핸들 메소드의 현재 반환 값이 사실 일 때만 실행될 수 있습니다. */ @override public void afthcompletion (httpservletrequest 요청, httpservletreponse 응답, 객체 처리기, 예외) 예외 {// todo 자동 생성 메소드 스텁}}}}}} (ii) WebRequestinterceptor 인터페이스를 구현합니다
WebRequestinterceptor에는 세 가지 방법이 있으며이 세 가지 방법을 사용하여 가로 채기를 구현합니다. 세 가지 방법 모두 동일한 매개 변수 WebRequest를 전달 하므로이 WebRequest는 무엇입니까? 이 WebRequest는 스프링으로 정의 된 인터페이스입니다. 그것의 메소드 정의는 기본적으로 httpservletrequest와 동일합니다. WebRequestinterceptor의 WebRequestinterceptor에서 수행 된 모든 작업은 HttpservletRequest와 동기화 된 다음 현재 요청에 전달됩니다.
(1) 사전 핸들 (WebRequest Request) 메소드. 이 방법은 요청이 처리되기 전에 호출됩니다. 즉, 컨트롤러 메소드가 호출되기 전에 호출됩니다. 이 방법은 핸들러 인터셉터의 사전 처리와 다릅니다. 주요 차이점은 메소드의 반환 값이 무효라는 것입니다. 즉, 리턴 값이 없음을 의미합니다. 따라서 우리는 일반적으로 자원을 준비하는 데 사용합니다. 예를 들어, 최대 절전 모드를 사용하면이 방법에서 최대 절전 모드 세션 객체를 준비한 다음 WebRequest의 setAttribute (이름, 값, 범위)를 사용하여 WebRequest 속성에 넣을 수 있습니다. 여기서는 정수 유형 인 setattribute 메소드의 세 번째 매개 변수 범위에 대해 이야기 할 수 있습니다. WebRequest의 상위 계층 인터페이스 요청 Attributes에 대해 세 가지 상수가 정의됩니다.
SCOPE_REQUEST : 값은 0이므로 요청시에만 액세스 할 수 있습니다.
SCOPE_SESSION : 그 값은 1입니다. 환경에서 허용하는 경우 로컬 격리 세션을 나타냅니다. 그렇지 않으면 정상 세션을 나타내며 세션 범위 내에서 액세스 할 수 있습니다.
SCOPE_GLOBAL_SESSION : 값은 2입니다. 환경에서 허용되면 전 세계적으로 공유되는 세션을 나타내며, 그렇지 않으면 정상 세션을 나타내며 세션 범위 내에서 액세스 할 수 있습니다.
(2) 사후 (WebRequest 요청, ModelMap Model) 메소드. 이 방법은 요청 처리 후에 호출됩니다. 즉 컨트롤러 메소드가 호출 된 후에도 뷰 리턴이 렌더링되기 전에 호출 되므로이 메소드에서 데이터 모델 모델 맵을 변경하여 데이터 표시를 변경할 수 있습니다. 이 방법에는 두 가지 매개 변수가 있습니다. WebRequest 객체는 전체 요청 데이터를 전달하는 데 사용됩니다. 예를 들어, 사전 핸들로 제조 된 데이터는 WebRequest를 통해 전달되고 액세스 할 수 있습니다. ModelMap은 컨트롤러 프로세스 이후에 반환 된 모델 객체입니다. 속성을 변경하여 반환 된 모델 모델을 변경할 수 있습니다.
(3) 절연 (WebRequest Request, Exception Ex) 메소드. 이 방법은 전체 요청이 처리 된 후, 즉 뷰가 반환되고 렌더링 된 후에 실행됩니다. 따라서이 방법에서 리소스 릴리스 작업을 수행 할 수 있습니다. WebRequest 매개 변수는 여기에서 Prehandle에서 준비한 리소스를 출시하기 위해 전달할 수 있습니다. 예외 매개 변수는 현재 요청 된 예외 객체를 나타냅니다. 스프링 예외 프로세서에서 컨트롤러에 던져진 예외가 처리 된 경우 예외 객체는 NULL입니다.
간단한 코드 설명은 다음과 같습니다.
import org.springframework.ui.modelmap; org.springframework.web.context.request.webrequest; org.springframework.web.context.request.webrequestinterceptor; 공개 클래스 AllInterceptor는 WebRequestinterceptor { /*** 요청이 처리되기 전에 실행됩니다. 이 방법은 주로 리소스 데이터를 준비하는 데 사용되며 요청 속성*/ @override public void prehandle (webrequest request)로 webRequest에 넣을 수 있습니다. request.setAttribute ( "request", "request", webRequest.scope_request); // 이것은 요청의 범위 내에 배치되므로 현재 요청의 요청에서 request.setAttribute ( "session", "session"만 가져올 수 있습니다. 환경에서 허용하는 경우 로컬로 격리 된 세션에서만 액세스 할 수 있습니다. 그렇지 않으면 일반 현재 세션에서 액세스 할 수 있습니다. request.setattribute ( "globalsession", "globalsession", webRequest.scope_global_session); // 환경에서 허용되면 전 세계 공유 세션에서 액세스 할 수 있습니다. 그렇지 않으면 정상적인 현재 세션에서 액세스 할 수 있습니다. ModelMap은 컨트롤러가 컨트롤러를 처리하도록 요청한 후 리턴 된 모델 객체를 나타 내기 때문에이 방법에서 ModelMap의 속성을 수정하여 반환 된 모델을 변경하는 효과를 달성 할 수 있습니다. */ @override public void posthandle (WebRequest 요청, ModelMap 맵)은 예외를 던져 {// todo 자동 생성 메소드 스텁 (String key : map.keyset ()) system.out.println (key + "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- AfterCompletion (WebRequest 요청, 예외 예외) 예외 {// todo 자동 생성 메소드 스터브 System.out.println (예외 + "-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= "); }}2. 정의 된 인터셉터 클래스를 SpringMVC의 절편 시스템에 추가합니다.
1. SpringMVC 구성 파일에서 MVC를 지원하는 스키마 추가
xmlns : mvc = "http://www.springframework.org/schema/mvc"xsi : schemalocation = "http://www.springframework.org/schema/mvc http://www.springframework.org/schema/screma/spridecemage.
다음은 내 진술의 예입니다.
<beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance"xmlns : context = "http://wwww.spramframett" xmlns : mvc = "http://www.springframework.org/schema/mvc"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/sprideans-scema http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ">
이러한 방식으로 SpringMVC 구성 파일에서 MVC 태그를 사용할 수 있습니다. MVC 태그에는 SpringMVC의 인터셉터를 선언하는 데 사용되는 MVC : 인터셉터가 있습니다.
(ii) MVC : 인터셉터 태그를 사용하여 SpringMVC 인터셉터 체인에 추가 해야하는 인터셉터를 선언합니다.
<mvc : interceptors> <!- Bean을 사용하여 인터셉터를 정의하십시오. MVC의 루트 아래에 직접 정의 된 인터셉터는 모든 요청을 가로 채 웁니다-> <bean/> <mvc : interceptor> <mvc : 매핑 경로 = "/test/number.do"/> <!-MVC에 정의 된 표현 : 인터셉터는 특정 요청을 가로 채기위한 것입니다-> <bean/> </mvc> </mvc> </mvc>.
위의 예에서 MVC : 인터셉터 태그를 사용하여 일련의 인터셉터가 선언 될 수 있음을 알 수 있습니다. 그런 다음 인터셉터 체인을 형성 할 수 있습니다. 인터셉터의 실행 순서는 선언 순서대로 실행됩니다. 선언 된 인터셉터의 사전 핸들 방법이 먼저 실행되지만 사후 방법과 절정 방법이 나중에 실행됩니다.
MVC에서 인터셉터를 선언하는 두 가지 주요 방법 : 인터셉터 태그 :
(1) 인터셉터 구현 클래스의 Bean 객체를 직접 정의합니다. 이러한 방식으로 선언 된 인터셉터 인터셉터는 모든 요청을 차단합니다.
(2) MVC : 인터셉터 태그를 사용하여 선언합니다. 이러한 방식으로 선언 된 인터셉터는 MVC : 매핑 서브 탭을 통해 인터셉트 해야하는 요청 경로를 정의 할 수 있습니다.
위의 두 단계 후에, 정의 된 인터셉터는 특정 요청을 가로 채기 위해 작용합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.