Эта статья в основном изучает введение перехватчиков в SpringMVC, примере кода, конфигурации и другого содержимого, следующим образом.
Процессор SpringMVC перехватчик аналогичен фильтрую фильтра в разработке сервлета, который используется для предварительного обработки и пост-обработки процессора. В этой статье в основном суммируется, как перехватчик определяется в SpringMVC, а также в исполнении и использовании перехватчика.
В Springmvc определите перехватчик для реализации интерфейса Handlerinterceptor и реализации трех методов, представленных в интерфейсе, следующим образом:
// Test Interceptor1public Class HandlerInterceptor1 реализует HandlerInterceptor {@Override public Boolean Prehandle (httpservletrequest, httpservletresponse response, обработчик объекта) Throws Exception {System.out.println ("handlerinterceptor1 ... True Edge Edlion Release return True;}@переопределить публичный void poshandle (httpservlectrequest, httpservletresponse response, обработчик объекта, ModelandView modelandView), создавая исключение {System.out.println ("handlerinterceptor1..pohthandle");}@oversemportemprederserserserserserserserserserserserserserserserserserserserserser Ответ, обработчик объекта, Exception Ex) Throws Exception {System.out.println ("handlerInterceptor1..AfterCompletion");}}Я сделаю простой анализ этих трех методов:
В SpringMVC перехватчик настроен для конкретного ручной работы, то есть, если перехватчик настроен в ручной работы, обработчик успешно отображается через ручной работы в конечном итоге использовать перехватчик. Например, предположим, что Mapper, который мы настроили в файле конфигурации, - это org.springframework.web.servlet.handler.beannameurlhandlermapp, затем мы можем настроить перехватчик следующим образом:
<Bean> <name = "name =" receptors "> <sist> <ref bean =" handlerinterceptor1 "/> <ref bean =" handlerinterceptor2 "/> </list> </property> </bean> <bean id =" Handlerinterceptor1 "/> <bean id =" handlerinterceptor2 "/>
Итак, в Springmvc, как настроить глобальный перехватчик? Как упомянуто выше, перехватчики в SpringMVC предназначены для определенных картинов. Чтобы решить эту проблему, структура SpringMVC впрыскивает, настроенные глобально схожими перехватчиками в каждое ручное управление, чтобы они могли стать глобальными перехватчиками. Конфигурация заключается в следующем:
<!-Настройка Interceptors-> <MVC: Interceptors> <!-Несколько перехватчиков, выполненных в последовательности-> <MVC: Interceptor> <MVC: PATH MAPPIT = "/**"/> <!-Указывает на перехват всех URL, включая SUBURL-пути-> <BEAN/> </MVC: Interceptor> <MVC: MAPCETTOR> <MVC: MAPCETTOR> <MVC: MAPCETTOR> <MVC path = "/**"/> <bean/> </mvc: Interceptor>
Как правило, мы используем эту конфигурацию, просто указываем URL -адрес, который будет перехвачен в <MVC: Mapping>.
Напишите два перехватчика, HandlerInterceptor2 и HandlerInterceptor3, в соответствии с вышеуказанной конфигурацией. Затем мы проверим выполнение трех перехватчиков и сделаем соответствующее резюме.
Другими словами, мы изменяем возвращаемое значение метода Prehandle трех перехватчиков на True, чтобы проверить порядок выполнения перехватчика. Результаты теста следующие:
HandlerInterceptor1… .prehandle
HandlerInterceptor2… .Prehandle
HandlerInterceptor3… .PrehandleHandlerInterceptor3…
HandlerInterceptor2… .posTheNdle
HandlerInterceptor1…HandlerInterceptor3…
HandlerInterceptor2… .fterCompletion
HandlerInterceptor1… .fterCompletion
Сводка сделана на основе печатных результатов: когда все перехватытели выпускаются, метод Prehandle выполняется в порядке конфигурации; в то время как два других метода выполняются в порядке конфигурации.
Мы изменяем возвращаемое значение в методе Prehandle третьего перехватчика на false, и первые два все еще верны, чтобы проверить порядок выполнения перехватчика. Результаты теста следующие:
HandlerInterceptor1… .prehandle
HandlerInterceptor2… .Prehandle
HandlerInterceptor3… .PrehandleHandlerInterceptor2… .fterCompletion
HandlerInterceptor1… .fterCompletion
Сделайте резюме на основе печатных результатов:
1. Поскольку перехватчики 1 и 2 выпускаются, можно выполнить предварительную пробку 3. Другими словами, предыдущий перехватчик может быть опубликован, а последний перехватчик может выполнить Prehandle.
2. Interceptor 3 не выпускает его, поэтому два других метода не выполняются. То есть, если перехватчик не освобождает его, то два других его метода не будут выполнены.
3. До тех пор, пока существует перехватчик, который не выпускается, метод постхандла всех перехватчиков не будет выполнен, но до тех пор, пока будет выполнен и выпущен Prehandle, будет выполнен метод последствия.
На самом деле, вы можете обратиться к вышеуказанной ситуации. Это особый случай. Давайте посмотрим на результаты бега:
HandlerInterceptor1… .prehandle
Очевидно, что был выполнен только метод Prehandle первого перехватчика. Поскольку ни один из них не был выпущен, ни один из них не выполнил метод пост -ндл и метод последствия.
Например, из второго случая, если вы хотите написать единую логику обработки исключений, то перехватчик должен быть помещен в первую позицию цепочки перехватчика и должен быть опубликован, поскольку будет выполнено только последствия, и если оно будет выполнено в первую позицию цепочки перехвата, в этом будет выполнено метод последствия.
Например, войдите в в систему до перехватчика аутентификации и поместите его в первую позицию в ссылке перехвата (если есть единая обработка исключений, его следует поместить за единую обработку исключений). Перехватчик проверки разрешения помещается после входа в перехватчика аутентификации (поскольку разрешение проверяется только после входа в систему).
Вот перехватчик проверки для входа, чтобы объяснить, как использовать перехватчик SpringMVC.
Во -первых, давайте посмотрим на требования: что мы хотим перехватить, что мы хотим делать, когда перехватываем. Идея заключается в следующем:
1. URL -адрес запроса пользователя
2. Interceptor выполняет проверку перехвата. Если запрашиваемый URL -адрес является общедоступным адресом (URL, к которому можно получить доступ без входа в систему), пусть будет выпущен.
Если пользовательский сеанс не существует, то перейдите на страницу входа в систему.
Если пользовательский сеанс существует, отпустите его и продолжайте операцию.
// Вход в @Requestmapping ("/login") открытая строка вхождение в систему (httpservletrequest -запрос, string username, string password). Вызывает исключение {// На самом деле, вам необходимо соответствовать базе данных //.../here, предположим, что вход в систему успешным httpsession session = request.getSession (); «redirect: QueryItems.action»;} // Login @RequestMapping ("/logout") public строка // тестовый перехватчик 1Public Class LoginInterceptor реализует HandlerInterceptor {// Выполнить перед введением метода обработчика // может использоваться для аутентификации идентификации и авторизации идентификации. Если аутентификация не проходит, это означает, что пользователь не вошел в систему. Этот метод должен перехватывать его и не выполнять дальнейшего выполнения. В противном случае, @Override public boolean prehandle (запрос httpservlectrequest, httpservletresponse, обработчик объекта). if (url.indexof ("login.action")> 0) {// Если выполняется подача входа в систему, выпустите возвращение true;} // Судья SessionHttpSession Session = request.getSession (); // Принесите информацию идентификацию пользователя из сеанса string username = (String) session.getattribut («undame»); if (username! Идентификация пользователя должна быть проверена, перейдите на страницу входа в систему request.getRequestDispatcher ("/web-inf/jsp/login.jsp").Затем настройте перехватчик:
<!-Настройте Interceptors-> <MVC: Interceptors> <!-Несколько интерцепторов, выполнять в последовательности-> <MVC: Interceptor> <MVC: PATH MAPPING = "/**"/> <!-Interceptor, включая Suburl Paths-> <Bean/> </MVC: Interceptor> <!
Таким образом, когда мы запрашиваем какой -либо URL, мы будем запечатлены перехватчиком, который мы только что определили, и затем мы определим, есть ли пользовательская информация в сеансе. Если нет, мы перейдем на страницу входа в систему и позволим нам войти в систему:
<form action = "$ {pagecontext.request.contextpath} /login.action" method = "post"> username: <input type = "text" name = "username" /> <br> пароль: <input type = "пароль" name = "пароль" /> <br> <input type = "Отправить" name = " /> < /form>Это в основном введение в использование перехватчиков.
Выше приведено все содержание этой статьи о подробном объяснении перехватчика в SpringMVC и примерах кода. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!