超簡單整合ML kit 實現聽寫單詞播報
阿新 • • 發佈:2020-06-30
今日份程式碼:
1.定義攔截器
import com.alibaba.fastjson.JSON;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* Spring boot攔截器
*/
@Component
public class MyInterceptor implements HandlerInterceptor {
private final static Logger log = LoggerFactory.getLogger(MyInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
boolean pass = true;
String methodType = request.getMethod(); //GET 或 POST
String url = request.getRequestURI();
String 入參值1 = request.getParameter("介面入參1");
if (!pass) {
response(request,response,"未通過攔截器校驗");
}
return pass;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
//返回攔截訊息給前端,解決跨域,編碼問題
private void response(HttpServletRequest request, HttpServletResponse response, String message) throws Exception{
String origin = request.getHeader("Origin");
if (StringUtils.isNotBlank(origin)) {
if (origin.toLowerCase().indexOf(".XXX.com") > 0) {
response.setHeader("Access-Control-Allow-Origin", origin); // 允許訪問的域
response.setHeader("Access-Control-Allow-Methods", "POST,GET");// 允許GET、POST的外域請求
response.setHeader("Access-Control-Allow-Credentials", "true"); // 允許請求帶cookie到伺服器
response.setContentType("text/html; charset=utf-8"); // 設定JSON格式標準輸出、及編碼
}
}
PrintWriter pw = response.getWriter();
pw.write(JSON.toJSONString(message));
pw.flush();
pw.close();
}
}
View Code
2.註冊攔截器
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import javax.annotation.Resource;
/**
* 攔截器配置
*/
@ControllerAdvice
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
@Resource
private MyInterceptor myInterceptor;
@Resource
private MyInterceptor2 myInterceptor2;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//多個攔截器 按照程式碼順序 從上到下先後進入
registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/XXX/111","/YYY/222");
registry.addInterceptor(myInterceptor2).addPathPatterns("/**");
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.maxAge(3600)
.allowCredentials(true);
}
}
View Code
3.掃描攔截器
啟動類上需要保證 攔截器定義的位置 可以被Spring掃描到:
@SpringBootApplication
@ComponentScan(basePackages = {"com.XX.*", "com.YY.*"})
View Code