SM2国密,中医院等保问题
							parent
							
								
									805c82e972
								
							
						
					
					
						commit
						13305bfd30
					
				| @ -0,0 +1,57 @@ | |||||||
|  | package com.glxp.api.aspect; | ||||||
|  | 
 | ||||||
|  | import javax.servlet.ReadListener; | ||||||
|  | import javax.servlet.ServletInputStream; | ||||||
|  | import javax.servlet.http.HttpServletRequest; | ||||||
|  | import javax.servlet.http.HttpServletRequestWrapper; | ||||||
|  | import java.io.BufferedReader; | ||||||
|  | import java.io.ByteArrayInputStream; | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.io.InputStreamReader; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 用来重新封装request | ||||||
|  |  */ | ||||||
|  | public class BodyRequestWrapper extends HttpServletRequestWrapper { | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 存放JSON数据主体 | ||||||
|  |      */ | ||||||
|  |     private String body; | ||||||
|  | 
 | ||||||
|  |     public BodyRequestWrapper(HttpServletRequest request, String context) { | ||||||
|  |         super(request); | ||||||
|  |         body = context; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public ServletInputStream getInputStream() throws IOException { | ||||||
|  |         final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes("UTF-8")); | ||||||
|  |         return new ServletInputStream() { | ||||||
|  |             @Override | ||||||
|  |             public int read() throws IOException { | ||||||
|  |                 return byteArrayInputStream.read(); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public boolean isFinished() { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public boolean isReady() { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void setReadListener(ReadListener listener) { | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public BufferedReader getReader() throws IOException { | ||||||
|  |         return new BufferedReader(new InputStreamReader(this.getInputStream())); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,53 @@ | |||||||
|  | package com.glxp.api.aspect; | ||||||
|  | 
 | ||||||
|  | import com.alibaba.fastjson.JSON; | ||||||
|  | import com.glxp.api.util.Sm2Util; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.springframework.stereotype.Component; | ||||||
|  | import org.springframework.util.StringUtils; | ||||||
|  | 
 | ||||||
|  | import javax.servlet.*; | ||||||
|  | import javax.servlet.http.HttpServletRequest; | ||||||
|  | import java.io.IOException; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 请求加解密过滤器 | ||||||
|  |  */ | ||||||
|  | @Slf4j | ||||||
|  | @Component | ||||||
|  | public class RequestHandler implements Filter { | ||||||
|  |     @Override | ||||||
|  |     public void init(FilterConfig filterConfig) throws ServletException { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 进行请求加密 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | ||||||
|  |         // form-data不校验
 | ||||||
|  |         if ("application/x-www-form-urlencoded".equals(request.getContentType())) { | ||||||
|  |             chain.doFilter(request, response); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 拿到加密串
 | ||||||
|  |         String data = new RequestWrapper((HttpServletRequest) request).getBody(); | ||||||
|  |         if (StringUtils.isEmpty(data)) { | ||||||
|  |             chain.doFilter(request, response); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 解析
 | ||||||
|  |         String body = Sm2Util.decrypt("00e36cfc8d61175584333e6160c645700f2a4659f5908c1bed5824423eab1a1626", JSON.parseObject(data).getString("data")); | ||||||
|  |         log.info(body); | ||||||
|  |         request = new BodyRequestWrapper((HttpServletRequest) request, body); | ||||||
|  |         chain.doFilter(request, response); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void destroy() { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,89 @@ | |||||||
|  | package com.glxp.api.aspect; | ||||||
|  | 
 | ||||||
|  | import javax.servlet.ReadListener; | ||||||
|  | import javax.servlet.ServletInputStream; | ||||||
|  | import javax.servlet.http.HttpServletRequest; | ||||||
|  | import javax.servlet.http.HttpServletRequestWrapper; | ||||||
|  | import java.io.*; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * 用来读取body | ||||||
|  |  */ | ||||||
|  | public class RequestWrapper extends HttpServletRequestWrapper { | ||||||
|  |     private final String body; | ||||||
|  | 
 | ||||||
|  |     public RequestWrapper(HttpServletRequest request) { | ||||||
|  |         super(request); | ||||||
|  |         StringBuilder stringBuilder = new StringBuilder(); | ||||||
|  |         BufferedReader bufferedReader = null; | ||||||
|  |         InputStream inputStream = null; | ||||||
|  |         try { | ||||||
|  |             inputStream = request.getInputStream(); | ||||||
|  |             if (inputStream != null) { | ||||||
|  |                 bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); | ||||||
|  |                 char[] charBuffer = new char[128]; | ||||||
|  |                 int bytesRead = -1; | ||||||
|  |                 while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { | ||||||
|  |                     stringBuilder.append(charBuffer, 0, bytesRead); | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 stringBuilder.append(""); | ||||||
|  |             } | ||||||
|  |         } catch (IOException ex) { | ||||||
|  | 
 | ||||||
|  |         } finally { | ||||||
|  |             if (inputStream != null) { | ||||||
|  |                 try { | ||||||
|  |                     inputStream.close(); | ||||||
|  |                 } catch (IOException e) { | ||||||
|  |                     e.printStackTrace(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             if (bufferedReader != null) { | ||||||
|  |                 try { | ||||||
|  |                     bufferedReader.close(); | ||||||
|  |                 } catch (IOException e) { | ||||||
|  |                     e.printStackTrace(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         body = stringBuilder.toString(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public ServletInputStream getInputStream() throws IOException { | ||||||
|  |         final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes()); | ||||||
|  |         ServletInputStream servletInputStream = new ServletInputStream() { | ||||||
|  |             @Override | ||||||
|  |             public boolean isFinished() { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public boolean isReady() { | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public void setReadListener(ReadListener readListener) { | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             @Override | ||||||
|  |             public int read() throws IOException { | ||||||
|  |                 return byteArrayInputStream.read(); | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |         return servletInputStream; | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public BufferedReader getReader() throws IOException { | ||||||
|  |         return new BufferedReader(new InputStreamReader(this.getInputStream())); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getBody() { | ||||||
|  |         return this.body; | ||||||
|  |     } | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in New Issue