Эта статья в основном представляет перехватчик SpringMVC, следующим образом:
1. Дипетчерервлет
Springmvc имеет унифицированный входной диспетчер, и все запросы проходят через DispatcherServlet.
DispatcherServlet-это предварительный контроллер, настроенный в файле web.xml. Чтобы перехватить соответствующие запросы, правила соответствия перехвата сервлета должны быть определены сами по себе, а перехваченные запросы должны быть распределены по целевому контроллеру в соответствии с определенными правилами обработки. Итак, теперь мы добавляем следующую конфигурацию в web.xml:
<!-При инициализации DispatcherServlet, Framework ищет файл с именем [Servlet-name] -servlet.xml в каталоге веб-приложения Web-Inf и определяет там соответствующие бобы, переопределяя любые бобы, определенные глобально-> <Servlet> <Servlet-name> имя Springmybatis </servlet-name>> wornally-> <servlet> <servlet-name> warnmybatis </servlet-name>> <Servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet> <Load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name> springmybatis </servlet-name> <!-Все запросы будут обрабатываться с помощью диспетчера> <url-p-p-pater> <//</<! </servlet-mapping>
2. Статические ресурсы не перехватывают
Если вы только настраиваете перехват URL -адресов, аналогично формату *.do, нет проблем с доступом к статическим ресурсам. Однако, если конфигурация перехватывает все запросы (например, «/», мы настроили выше), она приведет к тому, что статические ресурсы, такие как файлы JS, файлы CSS и файлы изображений, быть недоступными.
Как правило, перехватчик в основном реализуется для управления разрешением, в основном перехватывая некоторые запросы на URL, поэтому статические ресурсы не перехватываются. Как правило, есть два способа отфильтровать статические ресурсы.
Первым является использование <MVC: по умолчанию-спертлетку /> (как правило, имя сервиса по умолчанию сервера веб-приложений-«по умолчанию», поэтому здесь мы активируем Defauldserblet Tomcat для обработки статических файлов и настраиваем следующий код в web.xml :) :)
<!- Сервлет предусмотрен для контейнеров, таких как Tomcat, причал и т. Д., И изменяет картирование статического ресурса с / статического / каталога. For example, when you visited http://localhost/foo.css, now http://localhost/static/foo.css --> <!-- Don't intercept static files --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/js/*</url-pattern> <Url-pattern>/css/*</url-pattern> <url-pattern>/images/*</url-pattern> <url-pattern>/fonts/*</url-pattern> </servlet-mapping>
Томкат, причал, JBoss и Glassfish название сервлета по умолчанию-«По умолчанию»
Смола имя сервлета по умолчанию --- «Смоловый файл»
Weblogic по умолчанию имя сервлета-"fileservlet"
WebSphere по умолчанию имя сервлета-"SimpleFileservlet"
Если имя сервиса по умолчанию всех ваших веб-серверов приложений не является «по умолчанию», вам необходимо отобразить указанное с помощью свойства по умолчанию-servlet-name:
<MVC: по умолчанию-спертлеру-handler по умолчанию-servlet-name = "Имя Сервлета, используемое веб-сервером по умолчанию" />
Второй тип - использовать <mvc: resources /> и добавить следующий код в файл конфигурации Springmvc:
<MVC: MAPPING = "/JS/**" location = "/static_resources/javascript/"/> <mvc: ресурсы mapping = "/styles/**" location = "/static_resources/css/"/> <mvc: resources mapping = "/** location ="/static_resourcess/"/>"/> "/>"/> "/>"/> "/>"/> "/>"/> "/>
3. Пользовательский перехватчик
Перехватчик SpringMVC HandlerInterceptorAdapter предоставляет три метода Prehandle, Posthandle и последствия. Prehandle вызывается перед процессором службы обработки запроса,
Posthandle выполняется после того, как бизнес -процессор завершает выполнение запроса и генерирует представление. После того, как DispatcherServlet полностью обрабатывает после того, как DispatcherServlet полностью обработала и может использоваться для очистки ресурсов и т. Д. Следовательно, чтобы реализовать свою собственную логику управления разрешениями, вам необходимо унаследовать HandlerInterceptorAdapter и переписать его три метода.
Во -первых, добавьте моего собственного определенного перехвата в Springmvc.xml. Моя логика реализации CommonInterceptor.
<!-Настройка перехватчиков, множественные перехватчики, выполнять последовательно-> <MVC: Interceptors> <MVC: Interceptor> <!-соответствует пути URL. Если вы не настраиваете или/**, все контроллеры будут перехвачены-> <mvc: mapping path = "/user/**"/> <mvc: mapping path = "/test/**"/> <bean> </bean> </mvc: Interceptor> <! Обратный заказ -> </mvc: Interceptors>
Моя логика перехвата: «Перед входом в систему, любой URL -адрес доступа будет перепрыгнуть на страницу входа в систему; после успешного входа в систему перейдите к предыдущему URL», конкретный код выглядит следующим образом:
/ ** * */ package com.alibaba.interceptor; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Импорт org.slf4j.logger; Импорт org.slf4j.loggerfactory; Импорт org.springframework.web.servlet.modelandView; Импорт org.springframework.web.servlet.handler.handlerinterceptorAdapter; импорт com.alibaba.util.requestutil; / ** * @author tfj * 2014-8-1 */ public Class CommonInterceptor Extends handlerInterceptorAdapter {private final logger log = loggerfactory.getLogger (commonInterceptor.class); Public Static Final String Last_Page = "com.alibaba.lastpage"; / * * Используйте регулярное отображение по пути, который необходимо перехватить частную строку MappingUrl; public void setmappingUrl (String mappingUrl) {this.mappingUrl = mappingUrl; } * / / /* * * * Вызывается перед бизнес -процессором обрабатывает запрос * Если false возвращается * выполнить все перехватчики athercomplotion () из текущего перехватчика, затем выйдите из цепочки перехвата * Если истина * выполнить следующий перехватчик, пока все перехватчики не будут выполнены * выполнить контроллер Interceptor *, затем введите цепь Interceptor, Feectore * exectore exectore exectore (). Из последнего перехвата */ @Override public boolean prehandle (httpservletrequest -запрос, httpservletresponse ответ, обработчик объекта) бросает исключение {if ("get" .equalsignorecase (request.getmethod ())) {requestil.saverequest (); } log.info ("=============== 执行顺序: 1 、 prehandle ===================="); String requesturi = request.getRequesturi (); String contextPath = request.getContextPath (); String url = requesturi.substring (contextpath.length ()); log.info ("requesturi:"+requesturi); log.info ("contextpath:"+contextpath); log.info ("url:"+url); String username = (string) request.getSession (). GetAttribute ("user"); if (username == null) {log.info ("Interceptor: прыгнуть на страницу входа!"); request.getRequestDispatcher ("/web-inf/jsp/login.jsp"). вернуть ложь; } else вернуть true; } / *** После того, как бизнес -процессор завершит обработку запроса, действие, выполненное до сгенерированного представления* Вы можете добавить данные в модель и, такие как текущее время* / @@override public void posathandle (httpservletrequest, httpservletresponse response, объектный обработчик, модель и модель и модели log.info ("========================================================================================================================= log.info ("====================================================================================================== ========================================================================================== ========================================================================================== ========================================================================================== Ответ, Обработчик объекта, исключение Ex) Throws Exception {log.info ("============== 执行顺序: 3 、 Aftercomplotion ============== ПРИМЕЧАНИЕ. В приведенном выше коде я написал запрос, который в основном реализует такие функции, как получение текущего запроса, объект сеанса, сохранение и шифрование страниц и вывод.
На этом этапе перехватчик был реализован, и эффект, как показано на рисунке:
Я буду заблокирован путем посещения /тестирования /привет напрямую
После успешного входа в систему он перейдет на страницу, соответствующую /тестировать /привет
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.