springboot+resttemplat+请求拦截器
参考:https://www.cnblogs.com/kaibindirver/p/15527052.html
创建配置文件来注册拦截器
MyMvcConfig
1 package com.config; 2 3 import com.controle.lanjieqi.LoginHandlerInterceptor; 4 import org.springframework.context.annotation.Bean; 5 import org.springframework.context.annotation.Configuration; 6 import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 7 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 8 9 /** 10 * @author: Amim 11 * @year: 2022/9 12 **/ 13 @Configuration 14 public class MyMvcConfig implements WebMvcConfigurer { 15 16 //所有的WebMvcConfigurerAdapter组件都会一起起作用 17 @Bean //将组件注册在容器中 18 public WebMvcConfigurer webMvcConfigurerAdapter(){ 19 return new WebMvcConfigurer(){ 20 21 //注册拦截器 22 @Override 23 public void addInterceptors(InterceptorRegistry registry) { 24 //静态资源; *.css,*.js 25 //SpringBoot已经做好了静态资源映射 26 registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**"); 27 // .excludePathPatterns("/index.html","/","/user/login","/static/**","/webjars/**"); 28 // /** 表示拦截所有路径下的所有请求 29 // registry.addInterceptor(new LoginHandlerInterceptor()) 30 // .addPathPatterns("/person.html","/Person.html", 31 // "/questionnaire.html","/Questionnaire.html", 32 // "/result.html","/Result.html"); 33 } 34 }; 35 } 36 37 }
创建一个拦截器
LoginHandlerInterceptor
1 package com.controle.lanjieqi; 2 3 import org.springframework.stereotype.Component; 4 import org.springframework.web.servlet.HandlerInterceptor; 5 import org.springframework.web.servlet.ModelAndView; 6 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 /** 11 * @author: Amim 12 * @year: 2022/9 13 **/ 14 @Component 15 public class LoginHandlerInterceptor implements HandlerInterceptor { 16 17 //目标方法执行之前 18 @Override 19 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 20 21 //--------------------------------------------------------添加请求头,允许跨域----方法一 22 // setHeader(name, value):如果Header中没有定义则添加,如果已定义则用新的value覆盖原用value值。 23 // addHeader(name, value):如果Header中没有定义则添加,如果已定义则保持原有value不改变。 24 response.setHeader("Access-Control-Allow-Origin","*"); 25 response.setHeader("Access-Control-Allow-Headers", "*"); 26 //Access-Control-Allow-Methods: 真实请求允许的方法 27 //Access-Control-Allow-Headers: 服务器允许使用的字段 28 //Access-Control-Allow-Credentials: 是否允许用户发送、处理 cookie 29 //Access-Control-Max-Age: 预检请求的有效期,单位为秒。有效期内,不会重复发送预检请求 30 31 32 //获取请求参数 33 Object user5 = request.getQueryString(); 34 System.out.println(user5); 35 //获取请求头参数 36 Object user6 = request.getHeader("currentUser"); 37 System.out.println(user6); 38 //获取请求方式 39 Object user7 = request.getMethod(); 40 System.out.println(user7); 41 //获取请求路径 42 Object user8 = request.getRequestURI(); 43 System.out.println(user8); 44 // //重定向访问路径 45 // response.sendRedirect("/bbb2"); 46 //// 添加请求头 47 // response.addHeader("location","http://baidu.com"); 48 // if (user == null) { 49 // //未登录,返回登录页面 50 // System.out.println("第一拦截了,请求前"); 51 //// response.sendRedirect("/LoginError.html"); 52 // return false; 53 // }else { 54 // //放行 55 return true; 56 // } 57 } 58 59 @Override 60 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { 61 System.out.println("第二拦截了,请求中"); 62 } 63 64 @Override 65 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { 66 System.out.println("第三拦截了,请求后"); 67 } 68 }