拦截器在实际开发中经常用到,如:日志记录、权限检查、性能检测。
注意:
1.拦截器类实现HandlerInterceptor。
2.之前配置的xml文件可以用类代替实现WebMvcConfigurer。
3.在启动项目的时候就已经创建了拦截器类对象。
实现:
1.定义类,实现HanderInterceptor接口,这里不用强制重写三个方法,springboot集成的spring版本5.0以上,之前的4.3.8必须强制实现。
@Component
public class ApiInterceptor implements HandlerInterceptor {
public ApiInterceptor() {
System.out.println("=======ApiInterceptor========");
}
/***
* 重写拦截方法
*/
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler)throws Exception {
// TODO Auto-generated method stub
String token=request.getParameter("token");进入控制单元之前判断令牌,类似单点登陆
if(!StringUtils.isEmpty(token)) {
//数据库查询过程
if(token.equals("123456")) {实际上这个是数据库中获取的值进行比对
return true;
}
}
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("权限不足..........");
return false;
}
}
2.定义注册拦截器类‘
@Configuration
public class WebConfigs implements WebMvcConfigurer{
@Autowired
private ApiInterceptor apiInterceptor; 注入拦截器类对象
/***
* 通过该方法,给项目注册拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// TODO Auto-generated method stub
//给项目中注册了一个拦截器
registry.addInterceptor(apiInterceptor)
.addPathPatterns("/**") //需要拦截的路径 /**所有
.excludePathPatterns("/images/**"); //直接放行路径,可以放行控制单元路径/代表static文件夹
}
}