GeoServerProxyServlet.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package com.shkpr.service.proxycenter.components;
  2. import com.global.base.tools.AESUtil;
  3. import com.global.base.tools.CastUtil;
  4. import com.global.base.tools.EncryptionUtil;
  5. import com.shkpr.service.proxycenter.commtools.TimeTool;
  6. import com.shkpr.service.proxycenter.constants.ApiURI;
  7. import com.shkpr.service.proxycenter.controllerfilter.TokenAuthenticationService;
  8. import com.shkpr.service.proxycenter.dto.ResponseCode;
  9. import com.shkpr.service.proxycenter.globalcache.GlobalData;
  10. import org.springframework.util.StringUtils;
  11. import javax.servlet.ServletException;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14. import java.io.IOException;
  15. import java.util.Base64;
  16. public class GeoServerProxyServlet extends AbstractProxyServlet {
  17. public GeoServerProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
  18. super(proxyUri, proxyId, proxyAddress, proxyTK);
  19. }
  20. @Override
  21. protected void service(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException {
  22. super.service(servletRequest, servletResponse);
  23. }
  24. @Override
  25. protected ResponseCode checkHeader(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
  26. //ResponseCode code = super.checkHeader(servletRequest, servletResponse);
  27. //if (code != ResponseCode.RESULT_NORMAL)
  28. // return code;
  29. String strKprServerToken = servletRequest.getHeader(ApiURI.HEADER_AUTH_VERIFY);
  30. if (GlobalData.getInstance().getInternalCallPassword().equalsIgnoreCase(strKprServerToken))
  31. return ResponseCode.RESULT_NORMAL;
  32. String strSign = servletRequest.getHeader(ApiURI.HEADER_SIGNATURE);
  33. String strTime = servletRequest.getHeader(ApiURI.HEADER_TIMESTAMP);
  34. if (StringUtils.isEmpty(strSign) || StringUtils.isEmpty(strTime))
  35. return ResponseCode.RESULT_ERROR_SIGN;
  36. long reqUTC = CastUtil.castUTCLong(strTime, 0L);
  37. if (!(TimeTool.isMsUTC(reqUTC) && Math.abs(System.currentTimeMillis()-reqUTC) <= 5*TimeTool.MS_ONE_MIN)){
  38. return ResponseCode.RESULT_REQUEST_TIMEOUT;
  39. }
  40. String srcContent = "";
  41. try {
  42. srcContent = new String(Base64.getEncoder().encode(strTime.getBytes()), "UTF-8");
  43. }catch (Exception e){}
  44. String ascKey = EncryptionUtil.MD5Hash(TokenAuthenticationService.SECRET+strTime).substring(8,24).toLowerCase();
  45. String signDecode = AESUtil.AESDecrypt(AESUtil.Mode.CBC, AESUtil.Padding.PKCS5_PADDING, ascKey, strSign);
  46. if (StringUtils.isEmpty(signDecode) || !signDecode.equals(srcContent))
  47. return ResponseCode.RESULT_ERROR_SIGN;
  48. return ResponseCode.RESULT_NORMAL;
  49. }
  50. }