接口开发-拦截器
因为时间问题,直接说重点了。关于什么是拦截器?SpringBoot应该怎么集成?拦截器能做什么用,请自行百度。
通过拦截器,我们要解决两大问题,第一、跨域访问;第二、用户鉴权;
一、文件目录
二、ApiInterceptor
package com.univalsoft.common.interceptor; import com.univalsoft.common.model.APIResponse; import com.univalsoft.tools.HttpTools; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Arrays; public class ApiInterceptor implements HandlerInterceptor { // public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3) throws Exception { } // 拦截器 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 设置跨域访问 response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Methods", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type"); return true; // // 其他业务判断 // String[] noAuthApis = { // "/api/account/login", // 登录 // }; // // String requestURI = request.getRequestURI(); // if (!Arrays.asList(noAuthApis).contains(requestURI)) { // System.out.println("需要验证"); // // boolean canRequest = true; // if (canRequest) { // return true; // } else { // APIResponse error = new APIResponse(); // error.fail(APIResponse.ERROR_AUTH_FAIL, null); // HttpTools.sendJsonMessage(response, error); // return false; // } // } // // System.out.println("拦截器执行完毕"); // return true; } }
三、ApiInterceptorConf
package com.univalsoft.common.interceptor; import com.univalsoft.tools.PropertiesTools; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; @Configuration public class ApiInterceptorConf extends WebMvcConfigurationSupport { @Bean public HandlerInterceptor apiInterceptor() { return new ApiInterceptor(); } @Override protected void addInterceptors(InterceptorRegistry registry) { // 注册自己的拦截器 // 拦截所有请求 registry.addInterceptor(apiInterceptor()).addPathPatterns("/api/**"); super.addInterceptors(registry); } @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { // 接口文档 registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); // 图片服务 String _imagePath = PropertiesTools.applicationProperty("app.image.path"); registry.addResourceHandler("/image/**") .addResourceLocations("file:" + _imagePath); // APP H5 registry.addResourceHandler("/app/**") .addResourceLocations("classpath:/public/app/"); super.addResourceHandlers(registry); } }
经过上面的设置,接口的跨域访问就解决了,关于用户鉴权部分,注释掉了,有兴趣的可以研究一下。