由於時間問題,直接說重點了。關於什麼是攔截器?SpringBoot應該怎麼集成?攔截器能作什麼用,請自行百度。html
經過攔截器,咱們要解決兩大問題,第1、跨域訪問;第2、用戶鑑權;java
1、文件目錄web
2、ApiInterceptorspring
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; } }
3、ApiInterceptorConfapi
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); } }
通過上面的設置,接口的跨域訪問就解決了,關於用戶鑑權部分,註釋掉了,有興趣的能夠研究一下。 跨域