拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是aop的一种实现策略。 拦截器主要用来按照指定规则拒绝请求。
token令牌验证 请求数据校验 用户权限校验 放行指定接口
自定义类实现handlerinterceptor接口
1)oneinterceptor 拦截器
import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.web.servlet.handlerinterceptor; import org.springframework.web.servlet.modelandview; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; /** * 拦截器一 */ public class oneinterceptor implements handlerinterceptor { private static final logger logger = loggerfactory.getlogger(oneinterceptor.class.getname()); @override public boolean prehandle(httpservletrequest request, httpservletresponse response, object o) throws exception { string url =string.valueof(request.getrequesturl()) ; logger.info("1、url=="+url); // 放开拦截 return true; } @override public void posthandle(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, modelandview modelandview) throws exception { logger.info("1、posthandle"); } @override public void aftercompletion(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, exception e) throws exception { logger.info("1、aftercompletion"); } }
2)twointerceptor 拦截器
import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.web.servlet.handlerinterceptor; import org.springframework.web.servlet.modelandview; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; /** * 拦截器二 */ public class twointerceptor implements handlerinterceptor { private static final logger logger = loggerfactory.getlogger(twointerceptor.class.getname()); @override public boolean prehandle(httpservletrequest request, httpservletresponse response, object o) throws exception { string url =string.valueof(request.getrequesturl()) ; logger.info("2、url=="+url); // 放开拦截 return true; } @override public void posthandle(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, modelandview modelandview) throws exception { logger.info("2、posthandle"); } @override public void aftercompletion(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, exception e) throws exception { logger.info("2、aftercompletion"); } }
import com.boot.intercept.intercept.oneinterceptor; import com.boot.intercept.intercept.twointerceptor; import org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.interceptorregistry; import org.springframework.web.servlet.config.annotation.webmvcconfigurer; /** * web配置文件 */ @configuration public class webmvcconfig implements webmvcconfigurer { public void addinterceptors(interceptorregistry registry) { // 拦截所有路径 // 注册自定义两个拦截器 registry.addinterceptor(new oneinterceptor()).addpathpatterns("/**"); registry.addinterceptor(new twointerceptor()).addpathpatterns("/**"); } }
import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; @restcontroller public class interceptcontroller { @requestmapping("/requrl") public string requrl (){ return "success" ; } }
日志输出内容如下
intercept.oneinterceptor : 1、url==http://127.0.0.1:8005/requrl intercept.twointerceptor : 2、url==http://127.0.0.1:8005/requrl intercept.twointerceptor : 2、posthandle intercept.oneinterceptor : 1、posthandle intercept.twointerceptor : 2、aftercompletion intercept.oneinterceptor : 1、aftercompletionla
拦截器的拦截顺序,是按照web配置文件中注入拦截器的顺序执行的。
github:知了一笑 https://github.com/cicadasmile/spring-boot-base
如对本文有疑问, 点击进行留言回复!!
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论