springboot中拦截器的使用
1、使用注解@Configuration配置拦截器
2、继承WebMvcConfigurAdapter
3、重写addInterceptors添加需要的拦截器地址
拦截器(放行)一:
package com.mybatis.controller.interceptor;
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{
/**
* 在请求处理之前进行调用(Controller方法调用之前)
* */
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,Object object )throws Exception{
System.out.println("被One拦截,放行");
return true;
}
/**
* 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
* **/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object object, ModelAndView mv)throws Exception{
System.out.println("one处理中");
}
/**
* 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行
* (主要是用于进行资源清理工作)
* **/
@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response,
Object object,Exception ex) throws Exception{
System.out.println("one释放资源");
}
}
拦截器二(拦截):
package com.mybatis.controller.interceptor;
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{
/**
* 在请求处理之前进行调用(Controller方法调用之前)
* */
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,Object object )throws Exception{
System.out.println("被Two拦截");
return false;
}
/**
* 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
* **/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object object, ModelAndView mv)throws Exception{
System.out.println("Two处理中");
}
/**
* 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行
* (主要是用于进行资源清理工作)
* **/
@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response,
Object object,Exception ex) throws Exception{
System.out.println("Two释放资源");
}
}
控制器:
package com.mybatis.controller.interceptor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/one")
public class OneController {
@RequestMapping("/onetest")
public String onetest(){
return "hello one";
}
}
调用拦截器:
package com.mybatis.config;
import com.mybatis.controller.interceptor.OneInterceptor;
import com.mybatis.controller.interceptor.TwoInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 多个拦截器组成一个拦截器链
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用户排除拦截
registry.addInterceptor(new TwoInterceptor()).addPathPatterns("/one/**");
// 需要拦截多个方法时,直接在后面加.addPathPatterns("/two/**")
//registry.addInterceptor(new TwoInterceptor()).addPathPatterns("/one/**").addPathPatterns("/two/**");
super.addInterceptors(registry);
}
}
调用拦截器One: