Я изучал фильтры раньше, но фильтры предназначены для сервлетов и используются в SpringMVC и Spring Boots. Они не чувствуют себя очень полезными с точки зрения функций.
Давайте узнаем о перехватчиках здесь.
1. Порядок выполнения перехватчика
1. Содержание
2. Перехватчик
В перехватчике я добавил три (первые, два, треть), но содержимое почти одинаковое.
Пакет org.elvin.boot.interceptor; import org.springframework.web.servlet.handlerinterceptor; import org.springframework.web.servlet.modelandView; import javax.servlet.http.httpserverververtsermers; HandlerInterceptor {@Override Public Boolean Prehandle (httpservlectrequest httpservletrequest, httpservletresponse httpservletresponse, Object o) Throws Exception {System.out.println ("FirstInterceptor Prehandle"); вернуть истину; } @Override public void posathandle (httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, Object O, ModelandView ModelandView) Throws Exception {System.out.println ("FirstInterceptor Posthandle"); } @Override public void -последствия (httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, объект o, исключение e) throws Exception {System.out.println ("firstinterceptor после совместной связи"); }}Prehandle возвращает True до продолжения следующего исполнения.
Регистрация перехвата:
пакет org.elvin.boot.interceptor; import org.springframework.context.annotation.configuration; импорт org.springframework.web.servlet.config.annotation.InterceptorRegistr RegisterInterceptor Extends webmvcconfigurerAdapter {@Override public void AddInterceptors (реестр ReceptorTorgistry) {Registry.AdDinterceptor (новый FirstInterceptor ()); Registry.addinterceptor (новый Twointerceptor ()); Registry.addinterceptor (новый третий Interceptor ()); Super.addinterceptors (реестр); }}Чтобы проверить порядок выполнения, здесь используется Thymeleaf, и затем на переднем плане доступны свойства, которые я прошел на заднем плане. При доступе информация будет напечатана на консоли
пакет org.elvin.boot.pojo; public class book {private String name; public String getName () {System.out.println ("View: Book'Name IS" + name); вернуть имя; } public void setName (string name) {this.name = name; }}Контроллер:
Пакет org.elvin.boot.controller; import org.elvin.boot.pojo.book; import org.springframework.stereotype.controller; import org.springframework.ui.model; импорт org.springframework.web.bindation.getmaping; org.springframework.web.bind.annotation.requestmapping;@controller@requestmapping ("First") public class firstcontroller {private String controllerPath = "First/"; @Getmapping ("index") public String Index (Model Model) {System.out.println ("Контроллер: FirstController Index Doing ..."); Книга книги = новая книга (); Book.SetName ("Spring Boot"); model.addattribute ("book", book); return ControllerPath + "Индекс"; }}Вид:
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"/> <title> title </title> </head> <body> <h1 th: text = "$ {book.name}"> </h1> </body> </html>При доступе к Localhost: 8080/First/Index информация о ответе будет выводиться на консоли.
Таким образом, можно увидеть порядок выполнения одного перехватчика.
1. Метод Prehandle, выполненный до выполнения метода контроллера
2. Выполните метод действия контроллера
3. После выполнения действия, перед анализом представления (если есть), выполните метод пост -индле перехватчика
4. Проанализируйте представление
5. После анализа, выполнить метод последствия
Когда зарегистрированы несколько перехватчиков, порядок выполнения, как показано на рисунке.
2. Перехватчик реализует проверку разрешения
Точно так же сначала добавьте перехватчик разрешений
пакет org.elvin.boot.interceptor; import org.elvin.boot.annotation.nologin; импорт org.springframework.util.stringutils; импорт org.springframework.web.method.handlermethd; импорт org.spramework.web.servlet.handlerinterceptort; org.springframework.web.servlet.modelandView; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletrespons prehandle (httpservletrequest -запрос, httpservletresponse response, ручка объекта) бросает исключение {handlermethod method = (handlermethod) ручка; Class <?> ControllerType = method.getBeantype (); if (method.getmethodannotation (nologin.class)! = null || controllertype.getannotation (nologin.class)! = null) {return true; } Httpsession session = request.getSession (); String token = (string) session.getAttribute ("token"); if (! stringutils.isempty (token)) {return true; } response.sendredirect ("/login/index"); вернуть ложь; } @Override public void poshandle (httpservletrequest httpservletrequest, httpservletrespons httpservletresponse, Object O, Exception e) бросает исключение {}}Затем зарегистрируйте перехватчик разрешений
пакет org.elvin.boot.interceptor; import org.springframework.context.annotation.configuration; импорт org.springframework.web.servlet.config.annotation.InterceptorRegistr RegisterInterceptor Extends webmvcconfigurerAdapter {@Override public void AddInterceptors (реестр ReceptorTorgistry) {Registry.Addinterceptor (new LoginInterceptor ()); Super.addinterceptors (реестр); }}Добавьте контроллер входа в контроллер, предоставьте страницу входа и метод входа в систему
пакет org.elvin.boot.controller; import org.elvin.boot.annotation.nologin; импорт org.springframework.beans.factory.annotation.autowired; import org.springframework.stereoty.controller; импорт org.spramework.web.bindtation.getmapping; org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestmapping; импорт org.springframework.web.bind.annotation.responsebody; import javax.servlet.http.httpserveltretrequest; javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession;@nologin@controller@requestmapping ("login") public class logincontroller {@autowired private httpserserquest request; @Autowired Private httpservletresponse ответ; Private String ControllerPath = "Login/"; // @nologin @getmapping ("index") public String index () {httpsession session = request.getSession (); session.setattribute ("token", "token"); return ControllerPath + "Индекс"; } // @nologin @postmapping ("checkout") @responsebody public String cakeout () {httpsession session = request.getsession (); session.setattribute ("token", null); вернуть "OK"; }}Здесь я сделал аннотацию без входа в систему, которая может быть добавлена в контроллер или в действие.
Пакет org.elvin.boot.annotation; импорт java.lang.annotation.elementtype; импорт java.lang.annotation.retention; import java.lang.annotation.retentionpolicy; import java.lang.annotation.target; @Target ({elementType.type,, Elementtype.method}) @hareveration (armentpolicy.runtime) public @Interface nologin {}В аннотации нет контента.
Страница входа в систему (страница для входа здесь предназначена только для входа в систему, поэтому после посещения этой страницы это означает, что вход в систему успешно).
<! Doctype html> <html xmlns: th = "http://www.thymeleaf.org"> <head> <meta charset = "utf-8"/> <title> title </title> </head> <body> <viv> <input = "value =" vaduout "=" Проверка Th: src = "@{/js/jquery-1.11.1.js}"> </script> <script th: inline = "javascript"> $ (function () {$ (". Container"). Delegate ("#calceout", "click", function () {$ .ajax ({@@{/wogin/keep ', wept', wept ', wept', wept ', wype-weart (wept/wept (wep wept} data: {}, успех: function (res) {if (res == "OK") {alert ("argoout успешно"); }); </script> </body> </html>Метод демонстрации результатов:
В браузере сначала откройте страницу http: // localhost: 8080/login/index, а затем получить доступ к странице http: // localhost: 8080/first/index на новой вкладке.
Вы обнаружите, что при доступе к первым/индексу вы можете получить к нему доступ.
В настоящее время, на странице входа в систему/индекса, нажмите кнопку «Выйти», обновите первую/индексную страницу, и вы будете перейти на страницу входа в систему напрямую.
Приведенный выше пример объяснения загрузки строк и пользовательского перехвата - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.