package com.xzx.gc.filter; import cn.hutool.core.util.StrUtil; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.request.HeaderMapRequestWrapper; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.common.utils.SecurityUtil; import com.xzx.gc.common.utils.SpringUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.List; /** * created with IntelliJ IDEA. * author: fxbin * date: 2018/9/9 * time: 14:22 * description: */ @Slf4j public class GlobalFilter implements Filter { @Autowired private BusinessUtil businessUtil; @Override public void init(FilterConfig filterConfig) { log.trace("GlobalFilter init..."); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; if(!businessUtil.isAuthUrl(request.getRequestURI())||(SpringUtil.isDev()&&"true".equals(request.getHeader("swagger")))){ filterChain.doFilter(request, servletResponse); }else { String version = request.getHeader("version"); String authkey = request.getHeader("authkey"); if (businessUtil.isAuth(version) && !request.getRequestURI().contains("/admin")) { HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(request); //解密 头部的用户ID和签名和token String userId = request.getHeader("userId"); //rsa解密 authkey = SecurityUtil.decrypt(authkey); if (StrUtil.isNotBlank(userId)) { String decrypt = SecurityUtil.decrypt(authkey, userId); requestWrapper.addHeader("userId", decrypt); } String sign = request.getHeader("sign"); if (StrUtil.isNotBlank(sign)) { String decrypt = SecurityUtil.decrypt(authkey, sign); requestWrapper.addHeader("sign", decrypt); } String token = request.getHeader("token"); if (StrUtil.isNotBlank(token)) { String decrypt = SecurityUtil.decrypt(authkey, token); requestWrapper.addHeader("token", decrypt); } filterChain.doFilter(requestWrapper, servletResponse); } else { filterChain.doFilter(request, servletResponse); } } } @Override public void destroy() { log.trace("GlobalFilter destroy..."); } }