| @@ -6,13 +6,12 @@ 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.RequestInterceptor; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.http.converter.HttpMessageConverter; | |||
| import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; | |||
| import org.springframework.web.servlet.config.annotation.CorsRegistry; | |||
| import org.springframework.web.servlet.config.annotation.EnableWebMvc; | |||
| import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; | |||
| import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | |||
| import org.springframework.web.servlet.config.annotation.*; | |||
| import java.math.BigDecimal; | |||
| import java.math.BigInteger; | |||
| @@ -22,6 +21,13 @@ import java.util.List; | |||
| @Configuration | |||
| @EnableWebMvc | |||
| public class WebConfig implements WebMvcConfigurer { | |||
| @Autowired | |||
| private RequestInterceptor requestInterceptor; | |||
| @Override | |||
| public void addInterceptors(InterceptorRegistry registry) { | |||
| registry.addInterceptor(requestInterceptor).addPathPatterns("/api/**"); | |||
| } | |||
| @Override | |||
| public void addResourceHandlers(ResourceHandlerRegistry registry) { | |||
| @@ -0,0 +1,83 @@ | |||
| package com.iformall.interceptor; | |||
| import com.iformall.utils.HashUtil; | |||
| import com.iformall.utils.IPUtil; | |||
| import com.iformall.utils.Utility; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Component; | |||
| import org.springframework.web.servlet.ModelAndView; | |||
| 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; | |||
| /** | |||
| * 幂等检查 | |||
| * @author stormeye.wu | |||
| * @email wuguoqiang@iformall.com | |||
| * @date 2017-03-23 15:38 | |||
| */ | |||
| @Component | |||
| public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Resource | |||
| private RedisTemplate<String, String> redisTemplate; | |||
| @Override | |||
| public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | |||
| StringBuilder sb = new StringBuilder(); | |||
| sb.append("method=").append(request.getMethod()).append("&"); | |||
| String ipaddress = IPUtil.getIpAddr(request); | |||
| sb.append("ip=").append(ipaddress).append("&"); | |||
| final Enumeration parameterNames = request.getParameterNames(); | |||
| while (parameterNames.hasMoreElements()) { | |||
| String key = (String) parameterNames.nextElement(); | |||
| 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]; | |||
| int len = 0; | |||
| while ((len = inStream.read(buffer)) != -1) { | |||
| outSteam.write(buffer, 0, len); | |||
| } | |||
| String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| inStream.close(); | |||
| outSteam.close(); | |||
| sb.append(resultxml); | |||
| String key = "request:" + HashUtil.md5(sb.toString()); | |||
| if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | |||
| redisTemplate.expire(key, 3, TimeUnit.SECONDS); | |||
| logger.info(key + ": 第一次提交"); | |||
| return true; | |||
| } | |||
| logger.info(key + ": 第二次提交"); | |||
| return false; | |||
| } | |||
| @Override | |||
| public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { | |||
| } | |||
| @Override | |||
| public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception { | |||
| } | |||
| } | |||
| @@ -7,6 +7,7 @@ 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.RequestInterceptor; | |||
| import com.iformall.resolver.LoginUserHandlerMethodArgumentResolver; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.context.annotation.Configuration; | |||
| @@ -33,11 +34,14 @@ public class WebMvcConfig implements WebMvcConfigurer { | |||
| @Autowired | |||
| private AuthorizationInterceptor authorizationInterceptor; | |||
| @Autowired | |||
| private RequestInterceptor requestInterceptor; | |||
| @Autowired | |||
| private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver; | |||
| @Override | |||
| public void addInterceptors(InterceptorRegistry registry) { | |||
| registry.addInterceptor(authorizationInterceptor).addPathPatterns("/api/**"); | |||
| registry.addInterceptor(requestInterceptor).addPathPatterns("/api/**"); | |||
| } | |||
| @Override | |||
| @@ -0,0 +1,82 @@ | |||
| package com.iformall.interceptor; | |||
| import com.iformall.utils.HashUtil; | |||
| import com.iformall.utils.IPUtil; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Component; | |||
| import org.springframework.web.servlet.ModelAndView; | |||
| 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; | |||
| /** | |||
| * 幂等检查 | |||
| * @author stormeye.wu | |||
| * @email wuguoqiang@iformall.com | |||
| * @date 2017-03-23 15:38 | |||
| */ | |||
| @Component | |||
| public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Resource | |||
| private RedisTemplate<String, String> redisTemplate; | |||
| @Override | |||
| public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | |||
| StringBuilder sb = new StringBuilder(); | |||
| sb.append("method=").append(request.getMethod()).append("&"); | |||
| String ipaddress = IPUtil.getIpAddr(request); | |||
| sb.append("ip=").append(ipaddress).append("&"); | |||
| final Enumeration parameterNames = request.getParameterNames(); | |||
| while (parameterNames.hasMoreElements()) { | |||
| String key = (String) parameterNames.nextElement(); | |||
| 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]; | |||
| int len = 0; | |||
| while ((len = inStream.read(buffer)) != -1) { | |||
| outSteam.write(buffer, 0, len); | |||
| } | |||
| String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| inStream.close(); | |||
| outSteam.close(); | |||
| sb.append(resultxml); | |||
| String key = "request:" + HashUtil.md5(sb.toString()); | |||
| if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | |||
| redisTemplate.expire(key, 3, TimeUnit.SECONDS); | |||
| logger.info(key + ": 第一次提交"); | |||
| return true; | |||
| } | |||
| logger.info(key + ": 第二次提交"); | |||
| return false; | |||
| } | |||
| @Override | |||
| public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { | |||
| } | |||
| @Override | |||
| public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { | |||
| } | |||
| } | |||
| @@ -7,6 +7,7 @@ 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.RequestInterceptor; | |||
| import com.iformall.resolver.LoginUserHandlerMethodArgumentResolver; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.context.annotation.Configuration; | |||
| @@ -33,11 +34,14 @@ public class WebMvcConfig implements WebMvcConfigurer { | |||
| @Autowired | |||
| private AuthorizationInterceptor authorizationInterceptor; | |||
| @Autowired | |||
| private RequestInterceptor requestInterceptor; | |||
| @Autowired | |||
| private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver; | |||
| @Override | |||
| public void addInterceptors(InterceptorRegistry registry) { | |||
| registry.addInterceptor(authorizationInterceptor).addPathPatterns("/api/**"); | |||
| registry.addInterceptor(requestInterceptor).addPathPatterns("/api/**"); | |||
| } | |||
| @Override | |||
| @@ -0,0 +1,82 @@ | |||
| package com.iformall.interceptor; | |||
| import com.iformall.utils.HashUtil; | |||
| import com.iformall.utils.IPUtil; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Component; | |||
| import org.springframework.web.servlet.ModelAndView; | |||
| 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; | |||
| /** | |||
| * 幂等检查 | |||
| * @author stormeye.wu | |||
| * @email wuguoqiang@iformall.com | |||
| * @date 2017-03-23 15:38 | |||
| */ | |||
| @Component | |||
| public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Resource | |||
| private RedisTemplate<String, String> redisTemplate; | |||
| @Override | |||
| public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | |||
| StringBuilder sb = new StringBuilder(); | |||
| sb.append("method=").append(request.getMethod()).append("&"); | |||
| String ipaddress = IPUtil.getIpAddr(request); | |||
| sb.append("ip=").append(ipaddress).append("&"); | |||
| final Enumeration parameterNames = request.getParameterNames(); | |||
| while (parameterNames.hasMoreElements()) { | |||
| String key = (String) parameterNames.nextElement(); | |||
| 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]; | |||
| int len = 0; | |||
| while ((len = inStream.read(buffer)) != -1) { | |||
| outSteam.write(buffer, 0, len); | |||
| } | |||
| String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); | |||
| inStream.close(); | |||
| outSteam.close(); | |||
| sb.append(resultxml); | |||
| String key = "request:" + HashUtil.md5(sb.toString()); | |||
| if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | |||
| redisTemplate.expire(key, 3, TimeUnit.SECONDS); | |||
| logger.info(key + ": 第一次提交"); | |||
| return true; | |||
| } | |||
| logger.info(key + ": 第二次提交"); | |||
| return false; | |||
| } | |||
| @Override | |||
| public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { | |||
| } | |||
| @Override | |||
| public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { | |||
| } | |||
| } | |||