package com.yeshi.buwan.aspect;
|
|
import com.yeshi.buwan.util.JsonUtil;
|
import com.yeshi.buwan.util.StringUtil;
|
import com.yeshi.buwan.util.api.ClientApiUtil;
|
import com.yeshi.buwan.vo.AcceptData;
|
import org.aspectj.lang.ProceedingJoinPoint;
|
import org.aspectj.lang.annotation.Around;
|
import org.aspectj.lang.annotation.Aspect;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.PrintWriter;
|
import java.util.*;
|
|
@Component
|
@Aspect
|
public class MuGuaSignAspect {
|
|
@Resource
|
private ClientApiUtil clientApiUtil;
|
|
|
//签名验证
|
@Around("execution(public * com.yeshi.buwan.controller.api.mugua.*.*(..))")
|
public Object verifySign(ProceedingJoinPoint joinPoint) throws Throwable {
|
ServletRequestAttributes servletContainer = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
HttpServletRequest request = servletContainer.getRequest();
|
HttpServletResponse response = servletContainer.getResponse();
|
PrintWriter out = null;
|
|
Object[] args = joinPoint.getArgs();
|
for (Object obj : args) {
|
if (obj instanceof AcceptData) {
|
AcceptData acceptData = (AcceptData) obj;
|
clientApiUtil.initBaseParams(acceptData);
|
} else if (obj instanceof PrintWriter) {
|
out = (PrintWriter) obj;
|
}
|
}
|
|
if (!signIsRight(request)) {
|
if (out == null)
|
out = response.getWriter();
|
out.print(JsonUtil.loadFalseJson("签名错误3"));
|
return null;
|
}
|
|
Object obj = joinPoint.proceed(args);
|
return obj;
|
}
|
|
private boolean signIsRight(HttpServletRequest request) {
|
String appSecret = "123123123";
|
Map<String, String[]> params = request.getParameterMap();
|
List<String> list = new ArrayList<>();
|
for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) {
|
String key = its.next();
|
if (key.equalsIgnoreCase("sign")) {
|
continue;
|
}
|
list.add(key + "=" + params.get(key)[0]);
|
}
|
Collections.sort(list);
|
String sign = StringUtil.Md5(StringUtil.join(list, "&") + appSecret);
|
if (sign.equalsIgnoreCase(params.get("sign")[0])) {
|
return true;
|
}
|
return false;
|
}
|
|
|
}
|