1.编写拦截器:实现HandlerInterceptor接口
拦截器1:拦截并放行
* 在请求处理之前调用(controller方法调用之前)
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("被OneInterceptor拦截,并放行........");
//true表示放行 false表示不放行
return true;
}
* 在请求处理之后调用,但是在视图被渲染之前调用(Controller方法调用之后)
*/
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
* 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行
* 主要用于进行资源清理工作
*/
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
拦截器2:拦截不放行
public class TwoInterceptor implements HandlerInterceptor{
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
if(true){
returnErrorResponse(response, JSONResult.errorMsg("被TwoInterceptor拦截,不放行......"));
}
System.out.println("被TwoInterceptor拦截,不放行......");
return false;
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
public void returnErrorResponse(HttpServletResponse response, JSONResult result) throws IOException, UnsupportedEncodingException {
OutputStream out=null;
try{
response.setCharacterEncoding("utf-8");
response.setContentType("text/json");
out = response.getOutputStream();
out.write(JsonUtils.objectToJson(result).getBytes("utf-8"));
out.flush();
} finally{
if(out!=null){
out.close();
}
}
}
}
2.创建Controller--分别对应两个拦截器
3.配置拦截器@Configuration,创建拦截适配器,任何继承WebMvcConfigurerAdapter类,重写addInterceptors方法,然后为每个拦截器通过addPathPatterns方法设置拦截的路径
注意:我们可以根据需要来选择重写某些方法,方法如下:source-->Override/Implement Methods...即可看到如下:
4.浏览器访问http://localhost:8088/SpringBoot/one/index,这是由于这个路径被第一个拦截器拦截并放行,又被第二个拦截器拦截并不放行
访问http://localhost:8088/SpringBoot/two/index,这是由于这个路径被第二个拦截器拦截并不放行