1.拦截器(Interceptor) 在Spring Boot中,拦截器是基于Spring MVC框架的一部分,主要用于对控制器方法进行拦截处理。
拦截器是通过实现HandlerInterceptor接口来定义的 其中包括三个主要方法:preHandle、postHandle和afterCompletion。 1.preHandle方法在进入控制器方法之前执行 2.postHandle方法在控制器方法执行后、渲染视图之前执行 3.afterCompletion方法在渲染视图之后执行。
1-1.Springboot实现拦截器。 首先拦截器是基于MVC框架的
其中org.springframework:spring-webmvc依赖,有个HandlerInterceptor拦截器的接口类。
1.新建一个实现类继承HandlerInterceptor接口,并且重写接口类里面的三个方法
public class UserInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
System.out.println("=======拦截器=======");
String referer = "";
if (request.getHeader("referer") != null) {
referer = request.getHeader("referer");
int index = referer.indexOf("?");
if (index != -1) {
referer = referer.substring(0, index);
}
System.out.println(referer);
System.out.println(request.getRequestURI());
// 这里做拦截处理,和开放处理。
// 一般情况下是校验用户session来拦截未带session的请求,这里做开放不带session的api请求
// 这里做个示例。拦截和放行都写一下。
// 原理非常简单,你return的值为true就是放行,返回false则为拦截
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
// 如果请求类型是预检,就放行。流程很简单,举一反三即可
return true;
}
// 如果引号里的UIR等于request.getRequestURI。就设置响应值,返回false拦截该请求
if ("".equals(request.getRequestURI())) {
System.out.println("此api占未开放");
// 设置响应的内容类型
response.setContentType("application/json");
// 设置响应的字符编码
response.setCharacterEncoding("UTF-8");
// 获取响应输出流
PrintWriter writer = response.getWriter();
// 向响应体中写入内容
writer.println(RespResult.error404("此api占未开放"));
// 关闭输出流
writer.close();
return false;
}
// 这里可以写其他关于session的操作。
return true;
}
}
拦截器写完后是无法使用的。需要注册拦截器并且注入Springboot。 注册拦截器也是基于MVC框架的,所以先建一个类继承WebMvcConfigurer接口,并且重写addInterceptors方法
// 这里需要加上@Configuration定义配置类 // 用于构建bean定义,初始化Spring容器 @Configuration public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
System.out.println(registry);
// 这里直接new一个我们的拦截器类。用于注册即可。
registry.addInterceptor(new UserInterceptor());
}
}
到这里拦截器就可以正常使用,仔细看还是很简单的。
标签:拦截器,Springboot,request,response,referer,使用,println,public From: https://blog.51cto.com/u_16329794/8081198