一、前言
在javaee中,我们经常使用filter来做拦截器,后来有了springmvc,我们使用
HandlerInterceptor
进行拦截,springmvc的拦截器查看这篇文章,现在有了springboot,我们使用HandlerInterceptor进行拦截,但是我们不用xml的配置,省了很多的事情。
二、springboot拦截器使用
1、设置拦截器
/**
* @author 欧阳思海
* @date 2018/7/26 10:08
* 拦截器测试
*/
public class TestInterceptor implements HandlerInterceptor {
//目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
if(true){
System.out.println("已经进行拦截了。。。。。。。。");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object
handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
}
}
这里如果拦截成功,会输出:
已经进行拦截了。。。。。。。。
2、拦截器注册
在springmvc的时候,我们这里使用的是xml进行配置的,但是,在springboot中,我们使用java配置,具体用法如下:
//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能
//@EnableWebMvc 不要接管SpringMVC
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {
//注册拦截器2
@Override
public void addInterceptors(InterceptorRegistry registry) {
/*addPathPatterns 用于添加拦截规则
excludePathPatterns 用户排除拦截*/
registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/index.html", "/", "/user/login");
}
}
解释:
上面拦截器的注册,首先,我们使用
addPathPatterns("/**")
添加了所有的都拦截。
然后,在使用
excludePathPatterns("/index.html", "/", "/user/login")
将index.html和/user/login两个url设置不拦截。
注意注册时的区别
registry.addInterceptor(getInterfaceAuthCheckInterceptor()).addPathPatterns("/api/**")
:这种方式无论什么情况都可以
registry.addInterceptor(new InterfaceAuthCheckInterceptor()).addPathPatterns("/api/**")
:这种情况时,自定义的interceptor中不能注入其他内容,比如redis或者其他service,如果要注入,必须使用上面这种方法
下面我们写个controller进行测试。
3、controller测试
/**
* @author 欧阳思海
* @date 2018/7/25 9:57
*/
@Controller
public class HelloworldController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World!";
}
}
这里我们在浏览器输入:http://localhost:8080/test
后台输出结果:
已经进行拦截了。。。。。。。。
拦截器使用完毕!