玩轉springboot:實現springboot自定義攔截器
阿新 • • 發佈:2019-01-28
一、前言
在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!";
}
}
後臺輸出結果:
已經進行攔截了。。。。。。。。
攔截器使用完畢!