| @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature; | |||
| import com.fasterxml.jackson.databind.ObjectMapper; | |||
| import com.fasterxml.jackson.databind.module.SimpleModule; | |||
| import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; | |||
| import com.iformall.interceptor.HttpServletRequestWrapperFilter; | |||
| import com.iformall.interceptor.RequestInterceptor; | |||
| import com.iformall.ueditor.ActionEnter; | |||
| import com.iformall.ueditor.ConfigManager; | |||
| @@ -13,6 +14,7 @@ import com.iformall.ueditor.UEditorConfig; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | |||
| import org.springframework.boot.context.properties.EnableConfigurationProperties; | |||
| import org.springframework.boot.web.servlet.FilterRegistrationBean; | |||
| import org.springframework.context.annotation.Bean; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.http.converter.HttpMessageConverter; | |||
| @@ -133,4 +135,13 @@ public class WebConfig implements WebMvcConfigurer { | |||
| jackson2HttpMessageConverter.setObjectMapper(objectMapper); | |||
| converters.add(jackson2HttpMessageConverter); | |||
| } | |||
| @Bean | |||
| public FilterRegistrationBean<HttpServletRequestWrapperFilter> Filters() { | |||
| FilterRegistrationBean<HttpServletRequestWrapperFilter> registrationBean = new FilterRegistrationBean<HttpServletRequestWrapperFilter>(); | |||
| registrationBean.setFilter(new HttpServletRequestWrapperFilter()); | |||
| registrationBean.addUrlPatterns("/*"); | |||
| registrationBean.setName("koalaSignFilter"); | |||
| return registrationBean; | |||
| } | |||
| } | |||
| @@ -0,0 +1,77 @@ | |||
| package com.iformall.interceptor; | |||
| import javax.servlet.ReadListener; | |||
| import javax.servlet.ServletInputStream; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletRequestWrapper; | |||
| import java.io.*; | |||
| public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { | |||
| private final String body; | |||
| public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException { | |||
| super(request); | |||
| StringBuffer stringBuilder = new StringBuffer(); | |||
| BufferedReader bufferedReader = null; | |||
| try { | |||
| InputStream inputStream = request.getInputStream(); | |||
| if (inputStream != null) { | |||
| bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8")); | |||
| char[] charBuffer = new char[1024]; | |||
| int bytesRead = -1; | |||
| while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { | |||
| stringBuilder.append(charBuffer, 0, bytesRead); | |||
| } | |||
| } else { | |||
| stringBuilder.append(""); | |||
| } | |||
| } catch (IOException ex) { | |||
| throw ex; | |||
| } finally { | |||
| if (bufferedReader != null) { | |||
| try { | |||
| bufferedReader.close(); | |||
| } catch (IOException ex) { | |||
| throw ex; | |||
| } | |||
| } | |||
| } | |||
| body = stringBuilder.toString(); | |||
| } | |||
| @Override | |||
| public ServletInputStream getInputStream() throws IOException { | |||
| final ByteArrayInputStream byteArrayInputStream = | |||
| new ByteArrayInputStream(body.getBytes("utf-8")); | |||
| return 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(); | |||
| } | |||
| }; | |||
| } | |||
| @Override | |||
| public BufferedReader getReader() throws IOException { | |||
| return new BufferedReader(new InputStreamReader(this.getInputStream())); | |||
| } | |||
| public String getBody() { | |||
| return this.body; | |||
| } | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| package com.iformall.interceptor; | |||
| import javax.servlet.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.io.IOException; | |||
| public class HttpServletRequestWrapperFilter implements Filter { | |||
| @Override | |||
| public void init(FilterConfig filterConfig) throws ServletException { | |||
| } | |||
| @Override | |||
| public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | |||
| throws IOException, ServletException { | |||
| ServletRequest requestWrapper = null; | |||
| if (request instanceof HttpServletRequest) { | |||
| requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); | |||
| } | |||
| if (null == requestWrapper) { | |||
| chain.doFilter(request, response); | |||
| } else { | |||
| chain.doFilter(requestWrapper, response); | |||
| } | |||
| } | |||
| @Override | |||
| public void destroy() { | |||
| } | |||
| } | |||
| @@ -14,6 +14,9 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; | |||
| import javax.annotation.Resource; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.io.ByteArrayOutputStream; | |||
| import java.io.InputStream; | |||
| import java.nio.charset.Charset; | |||
| import java.util.Enumeration; | |||
| import java.util.concurrent.TimeUnit; | |||
| @@ -37,20 +40,16 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| // 获取不检查幂等 | |||
| return true; | |||
| } | |||
| String ipaddress = IPUtil.getIpAddr(request); | |||
| String url = request.getRequestURL().toString(); | |||
| if(url.contains("pvlog")) { | |||
| // pvlog不检查幂等 | |||
| return true; | |||
| } | |||
| StringBuilder sb = new StringBuilder(); | |||
| sb.append(url); | |||
| sb.append("method=").append(request.getMethod()).append("&"); | |||
| String ipaddress = IPUtil.getIpAddr(request); | |||
| sb.append("ip=").append(ipaddress).append("&"); | |||
| final Enumeration parameterNames = request.getParameterNames(); | |||
| @@ -61,7 +60,7 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| String parameter = request.getParameter(key); | |||
| sb.append(key).append("=").append(parameter).append("&"); | |||
| } | |||
| /* | |||
| InputStream inStream = request.getInputStream(); | |||
| ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); | |||
| byte[] buffer = new byte[1024]; | |||
| @@ -69,14 +68,13 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| while ((len = inStream.read(buffer)) != -1) { | |||
| outSteam.write(buffer, 0, len); | |||
| } | |||
| String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| String resultBody = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| inStream.close(); | |||
| outSteam.close(); | |||
| sb.append(resultxml); | |||
| */ | |||
| sb.append(resultBody); | |||
| String key = "request:" + HashUtil.md5(sb.toString()); | |||
| String key = "request: " + HashUtil.md5(sb.toString()); | |||
| if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | |||
| redisTemplate.expire(key, 3, TimeUnit.SECONDS); | |||
| logger.info(key + ": 第一次提交"); | |||
| @@ -7,9 +7,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; | |||
| import com.fasterxml.jackson.databind.module.SimpleModule; | |||
| import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; | |||
| import com.iformall.interceptor.AuthorizationInterceptor; | |||
| import com.iformall.interceptor.HttpServletRequestWrapperFilter; | |||
| import com.iformall.interceptor.RequestInterceptor; | |||
| import com.iformall.resolver.LoginUserHandlerMethodArgumentResolver; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.boot.web.servlet.FilterRegistrationBean; | |||
| import org.springframework.context.annotation.Bean; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.http.converter.HttpMessageConverter; | |||
| import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; | |||
| @@ -99,4 +102,13 @@ public class WebMvcConfig implements WebMvcConfigurer { | |||
| jackson2HttpMessageConverter.setObjectMapper(objectMapper); | |||
| converters.add(jackson2HttpMessageConverter); | |||
| } | |||
| @Bean | |||
| public FilterRegistrationBean<HttpServletRequestWrapperFilter> Filters() { | |||
| FilterRegistrationBean<HttpServletRequestWrapperFilter> registrationBean = new FilterRegistrationBean<HttpServletRequestWrapperFilter>(); | |||
| registrationBean.setFilter(new HttpServletRequestWrapperFilter()); | |||
| registrationBean.addUrlPatterns("/*"); | |||
| registrationBean.setName("koalaSignFilter"); | |||
| return registrationBean; | |||
| } | |||
| } | |||
| @@ -0,0 +1,77 @@ | |||
| package com.iformall.interceptor; | |||
| import javax.servlet.ReadListener; | |||
| import javax.servlet.ServletInputStream; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletRequestWrapper; | |||
| import java.io.*; | |||
| public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { | |||
| private final String body; | |||
| public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException { | |||
| super(request); | |||
| StringBuffer stringBuilder = new StringBuffer(); | |||
| BufferedReader bufferedReader = null; | |||
| try { | |||
| InputStream inputStream = request.getInputStream(); | |||
| if (inputStream != null) { | |||
| bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8")); | |||
| char[] charBuffer = new char[1024]; | |||
| int bytesRead = -1; | |||
| while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { | |||
| stringBuilder.append(charBuffer, 0, bytesRead); | |||
| } | |||
| } else { | |||
| stringBuilder.append(""); | |||
| } | |||
| } catch (IOException ex) { | |||
| throw ex; | |||
| } finally { | |||
| if (bufferedReader != null) { | |||
| try { | |||
| bufferedReader.close(); | |||
| } catch (IOException ex) { | |||
| throw ex; | |||
| } | |||
| } | |||
| } | |||
| body = stringBuilder.toString(); | |||
| } | |||
| @Override | |||
| public ServletInputStream getInputStream() throws IOException { | |||
| final ByteArrayInputStream byteArrayInputStream = | |||
| new ByteArrayInputStream(body.getBytes("utf-8")); | |||
| return 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(); | |||
| } | |||
| }; | |||
| } | |||
| @Override | |||
| public BufferedReader getReader() throws IOException { | |||
| return new BufferedReader(new InputStreamReader(this.getInputStream())); | |||
| } | |||
| public String getBody() { | |||
| return this.body; | |||
| } | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| package com.iformall.interceptor; | |||
| import javax.servlet.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.io.IOException; | |||
| public class HttpServletRequestWrapperFilter implements Filter { | |||
| @Override | |||
| public void init(FilterConfig filterConfig) throws ServletException { | |||
| } | |||
| @Override | |||
| public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | |||
| throws IOException, ServletException { | |||
| ServletRequest requestWrapper = null; | |||
| if (request instanceof HttpServletRequest) { | |||
| requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); | |||
| } | |||
| if (null == requestWrapper) { | |||
| chain.doFilter(request, response); | |||
| } else { | |||
| chain.doFilter(requestWrapper, response); | |||
| } | |||
| } | |||
| @Override | |||
| public void destroy() { | |||
| } | |||
| } | |||
| @@ -55,7 +55,7 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| String parameter = request.getParameter(key); | |||
| sb.append(key).append("=").append(parameter).append("&"); | |||
| } | |||
| /* | |||
| InputStream inStream = request.getInputStream(); | |||
| ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); | |||
| byte[] buffer = new byte[1024]; | |||
| @@ -63,14 +63,13 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| while ((len = inStream.read(buffer)) != -1) { | |||
| outSteam.write(buffer, 0, len); | |||
| } | |||
| String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| String resultBody = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| inStream.close(); | |||
| outSteam.close(); | |||
| sb.append(resultxml); | |||
| */ | |||
| sb.append(resultBody); | |||
| String key = "request:" + HashUtil.md5(sb.toString()); | |||
| String key = "request: " + HashUtil.md5(sb.toString()); | |||
| if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | |||
| redisTemplate.expire(key, 3, TimeUnit.SECONDS); | |||
| logger.info(key + ": 第一次提交"); | |||
| @@ -7,9 +7,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; | |||
| import com.fasterxml.jackson.databind.module.SimpleModule; | |||
| import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; | |||
| import com.iformall.interceptor.AuthorizationInterceptor; | |||
| import com.iformall.interceptor.HttpServletRequestWrapperFilter; | |||
| import com.iformall.interceptor.RequestInterceptor; | |||
| import com.iformall.resolver.LoginUserHandlerMethodArgumentResolver; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.boot.web.servlet.FilterRegistrationBean; | |||
| import org.springframework.context.annotation.Bean; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.http.converter.HttpMessageConverter; | |||
| import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; | |||
| @@ -99,4 +102,13 @@ public class WebMvcConfig implements WebMvcConfigurer { | |||
| jackson2HttpMessageConverter.setObjectMapper(objectMapper); | |||
| converters.add(jackson2HttpMessageConverter); | |||
| } | |||
| @Bean | |||
| public FilterRegistrationBean<HttpServletRequestWrapperFilter> Filters() { | |||
| FilterRegistrationBean<HttpServletRequestWrapperFilter> registrationBean = new FilterRegistrationBean<HttpServletRequestWrapperFilter>(); | |||
| registrationBean.setFilter(new HttpServletRequestWrapperFilter()); | |||
| registrationBean.addUrlPatterns("/*"); | |||
| registrationBean.setName("koalaSignFilter"); | |||
| return registrationBean; | |||
| } | |||
| } | |||
| @@ -0,0 +1,77 @@ | |||
| package com.iformall.interceptor; | |||
| import javax.servlet.ReadListener; | |||
| import javax.servlet.ServletInputStream; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletRequestWrapper; | |||
| import java.io.*; | |||
| public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { | |||
| private final String body; | |||
| public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException { | |||
| super(request); | |||
| StringBuffer stringBuilder = new StringBuffer(); | |||
| BufferedReader bufferedReader = null; | |||
| try { | |||
| InputStream inputStream = request.getInputStream(); | |||
| if (inputStream != null) { | |||
| bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8")); | |||
| char[] charBuffer = new char[1024]; | |||
| int bytesRead = -1; | |||
| while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { | |||
| stringBuilder.append(charBuffer, 0, bytesRead); | |||
| } | |||
| } else { | |||
| stringBuilder.append(""); | |||
| } | |||
| } catch (IOException ex) { | |||
| throw ex; | |||
| } finally { | |||
| if (bufferedReader != null) { | |||
| try { | |||
| bufferedReader.close(); | |||
| } catch (IOException ex) { | |||
| throw ex; | |||
| } | |||
| } | |||
| } | |||
| body = stringBuilder.toString(); | |||
| } | |||
| @Override | |||
| public ServletInputStream getInputStream() throws IOException { | |||
| final ByteArrayInputStream byteArrayInputStream = | |||
| new ByteArrayInputStream(body.getBytes("utf-8")); | |||
| return 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(); | |||
| } | |||
| }; | |||
| } | |||
| @Override | |||
| public BufferedReader getReader() throws IOException { | |||
| return new BufferedReader(new InputStreamReader(this.getInputStream())); | |||
| } | |||
| public String getBody() { | |||
| return this.body; | |||
| } | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| package com.iformall.interceptor; | |||
| import javax.servlet.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.io.IOException; | |||
| public class HttpServletRequestWrapperFilter implements Filter { | |||
| @Override | |||
| public void init(FilterConfig filterConfig) throws ServletException { | |||
| } | |||
| @Override | |||
| public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | |||
| throws IOException, ServletException { | |||
| ServletRequest requestWrapper = null; | |||
| if (request instanceof HttpServletRequest) { | |||
| requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); | |||
| } | |||
| if (null == requestWrapper) { | |||
| chain.doFilter(request, response); | |||
| } else { | |||
| chain.doFilter(requestWrapper, response); | |||
| } | |||
| } | |||
| @Override | |||
| public void destroy() { | |||
| } | |||
| } | |||
| @@ -55,7 +55,7 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| String parameter = request.getParameter(key); | |||
| sb.append(key).append("=").append(parameter).append("&"); | |||
| } | |||
| /* | |||
| InputStream inStream = request.getInputStream(); | |||
| ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); | |||
| byte[] buffer = new byte[1024]; | |||
| @@ -63,14 +63,13 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| while ((len = inStream.read(buffer)) != -1) { | |||
| outSteam.write(buffer, 0, len); | |||
| } | |||
| String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| String resultBody = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| inStream.close(); | |||
| outSteam.close(); | |||
| sb.append(resultxml); | |||
| */ | |||
| sb.append(resultBody); | |||
| String key = "request:" + HashUtil.md5(sb.toString()); | |||
| String key = "request: " + HashUtil.md5(sb.toString()); | |||
| if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | |||
| redisTemplate.expire(key, 3, TimeUnit.SECONDS); | |||
| logger.info(key + ": 第一次提交"); | |||