package com.kidgrow.zuul.filter; import cn.hutool.core.collection.ConcurrentHashSet; import com.kidgrow.common.exception.OpenSignatureException; import com.kidgrow.common.utils.SignatureUtils; import com.kidgrow.common.utils.WebUtils; import com.kidgrow.zuul.config.ApiProperties; import com.kidgrow.zuul.exception.JsonSignatureDeniedHandler; import com.kidgrow.zuul.service.feign.BaseAppServiceClient; import lombok.extern.slf4j.Slf4j; import org.springframework.util.AntPathMatcher; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Map; import java.util.Set; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* * @Description: 数字验签前置过滤器
* @Project:
* @CreateDate: Created in 2020/2/4 14:49
* @Author: liuke */ @Slf4j public class PreSignatureFilter extends OncePerRequestFilter { private JsonSignatureDeniedHandler signatureDeniedHandler; private BaseAppServiceClient baseAppServiceClient; private ApiProperties apiProperties; private static final AntPathMatcher pathMatch = new AntPathMatcher(); private Set signIgnores = new ConcurrentHashSet<>(); // public PreSignatureFilter(BaseAppServiceClient baseAppServiceClient, ApiProperties apiProperties, JsonSignatureDeniedHandler jsonSignatureDeniedHandler) { // this.baseAppServiceClient = baseAppServiceClient; // this.apiProperties = apiProperties; // this.signatureDeniedHandler = jsonSignatureDeniedHandler; // // 默认忽略签名 // signIgnores.add("/"); // signIgnores.add("/error"); // signIgnores.add("/favicon.ico"); // if (apiProperties != null) { // if (apiProperties.getSignIgnores() != null) { // signIgnores.addAll(apiProperties.getSignIgnores()); // } // if (apiProperties.getApiDebug()) { // signIgnores.add("/**/v2/api-docs/**"); // signIgnores.add("/**/swagger-resources/**"); // signIgnores.add("/webjars/**"); // signIgnores.add("/doc.html"); // signIgnores.add("/swagger-ui.html"); // } // } // } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String requestPath = request.getRequestURI(); System.out.println(request.getHeaderNames()); //if (apiProperties.getCheckSign() && !notSign(requestPath)) { Map params = WebUtils.getParameterMap(request); String appid=""; //params.get("app_id").toString(); if (!SignatureUtils.validateSign(params,appid)) { throw new OpenSignatureException("签名验证失败!"); } //} filterChain.doFilter(request, response); } protected boolean notSign(String requestPath) { if(apiProperties.getSignIgnores()==null){ return false; } for (String path : signIgnores) { if (pathMatch.match(path, requestPath)) { return true; } } return false; } }