Commit 3ba9ae9b authored by 万建斌's avatar 万建斌

20190828 bug修复

parent 106f3c4f
File added
...@@ -88,6 +88,24 @@ ...@@ -88,6 +88,24 @@
<artifactId>alipay-sdk-java</artifactId> <artifactId>alipay-sdk-java</artifactId>
<version>20150820220052</version> <version>20150820220052</version>
</dependency> </dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.10.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.10.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.10.5</version>
<scope>runtime</scope>
</dependency>
</dependencies> </dependencies>
......
...@@ -21,8 +21,12 @@ public enum ApiResponseEnum { ...@@ -21,8 +21,12 @@ public enum ApiResponseEnum {
*/ */
AUTH_SIGN_ERROR(10201,"签名验证失败"), AUTH_SIGN_ERROR(10201,"签名验证失败"),
AUTH_IP_ERROR(10202,"IP白名单验证失败"), AUTH_IP_ERROR(10202,"IP白名单验证失败"),
AUTH_TOKEN_ERROR(10203, "token验证失败"),
TOKEN_OVERTIME_ERROR(10204, "token已过期")
; ;
public static String AUTH_CENTER_SERVICE = "kyb-search";
private int errCode = 0; private int errCode = 0;
private String errMsg; private String errMsg;
......
...@@ -54,8 +54,8 @@ public class RSAEncryptUtil { ...@@ -54,8 +54,8 @@ public class RSAEncryptUtil {
map.put("password", "password123"); map.put("password", "password123");
map.put("flag", "0"); map.put("flag", "0");
// String content = AlipaySignature.getSignCheckContentV2(map); String content = AlipaySignature.getSignCheckContentV2(map);
String content = JSON.toJSONString(map); // String content = JSON.toJSONString(map);
System.out.println("拼接待签名字符串:"+content); System.out.println("拼接待签名字符串:"+content);
...@@ -63,18 +63,18 @@ public class RSAEncryptUtil { ...@@ -63,18 +63,18 @@ public class RSAEncryptUtil {
/* /*
* 对数据签名 RSA2对应的函数和密钥 * 对数据签名 RSA2对应的函数和密钥
*/ */
// String sign = AlipaySignature.rsaSign(map, MapUtils.getString(keyMap, "privateKey"), CHARSET); String sign = AlipaySignature.rsaSign(map, MapUtils.getString(keyMap, "privateKey"), CHARSET);
String sign = sign(content, MapUtils.getString(keyMap, "privateKey")); // String sign = sign(content, MapUtils.getString(keyMap, "privateKey"));
System.out.println("原始sign:" + sign); System.out.println("原始sign:" + sign);
// map.put("sign", sign); map.put("sign", sign);
/* /*
* 进入验签流程 * 进入验签流程
*/ */
// boolean result = AlipaySignature.rsaCheckV2(map, MapUtils.getString(keyMap, "publicKey"), CHARSET); boolean result = AlipaySignature.rsaCheckV2(map, MapUtils.getString(keyMap, "publicKey"), CHARSET);
boolean result = doCheck(content, sign, MapUtils.getString(keyMap, "publicKey"), CHARSET); // boolean result = doCheck(content, sign, MapUtils.getString(keyMap, "publicKey"), CHARSET);
System.out.println("验签结果:" + result); System.out.println("验签结果:" + result);
......
...@@ -3,6 +3,7 @@ package com.cesgroup.kingkong.entity; ...@@ -3,6 +3,7 @@ package com.cesgroup.kingkong.entity;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
...@@ -21,5 +22,9 @@ public class IPCheckEntity { ...@@ -21,5 +22,9 @@ public class IPCheckEntity {
private String ipAddress; private String ipAddress;
private Date lastCheckTime; private Long lastCheckTime;
private String token;
private Long lastTokenTime;
} }
package com.cesgroup.kingkong.interceptor; package com.cesgroup.kingkong.interceptor;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.internal.util.AlipaySignature;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cesgroup.common.utils.ApiResponse; import com.cesgroup.common.utils.ApiResponse;
import com.cesgroup.common.utils.ApiResponseEnum; import com.cesgroup.common.utils.ApiResponseEnum;
import com.cesgroup.common.utils.ApiResultUtil; import com.cesgroup.common.utils.ApiResultUtil;
import com.cesgroup.common.utils.RSAEncryptUtil;
import com.cesgroup.kingkong.entity.IPCheckEntity; import com.cesgroup.kingkong.entity.IPCheckEntity;
import com.cesgroup.kingkong.entity.SecretKeyEntity; import com.cesgroup.kingkong.entity.SecretKeyEntity;
import com.cesgroup.kingkong.service.IPCheckService; import com.cesgroup.kingkong.service.IPCheckService;
import com.cesgroup.kingkong.service.SecretKeyService; import com.cesgroup.kingkong.service.SecretKeyService;
import com.github.pagehelper.util.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
...@@ -23,6 +23,8 @@ import org.springframework.web.servlet.HandlerInterceptor; ...@@ -23,6 +23,8 @@ import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
...@@ -45,14 +47,16 @@ public class TokenInterceptor implements HandlerInterceptor { ...@@ -45,14 +47,16 @@ public class TokenInterceptor implements HandlerInterceptor {
log.info("--------------------HTTP BEGIN, PREHANDLE BEGIN--------------------"); log.info("--------------------HTTP BEGIN, PREHANDLE BEGIN--------------------");
log.info("--------------------REQUEST URI IS: {}", request.getRequestURI()); log.info("--------------------REQUEST URI IS: {}", request.getRequestURI());
log.info("--------------------PARAMS BEGIN--------------------"); log.info("--------------------PARAMS BEGIN--------------------");
Map<String, String[]> params = request.getParameterMap(); Map<String, String[]> paramsMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : params.entrySet()){ Map<String, String> params = new HashMap<>();
for (Map.Entry<String, String[]> entry : paramsMap.entrySet()){
String[] values = entry.getValue(); String[] values = entry.getValue();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (String value : values) { for (String value : values) {
sb.append(value + " "); sb.append(value);
} }
log.info(entry.getKey() + " : " + sb.toString()); log.info(entry.getKey() + " : " + sb.toString());
params.put(entry.getKey(), sb.toString());
} }
log.info("--------------------PARAMS END----------------------"); log.info("--------------------PARAMS END----------------------");
...@@ -63,14 +67,33 @@ public class TokenInterceptor implements HandlerInterceptor { ...@@ -63,14 +67,33 @@ public class TokenInterceptor implements HandlerInterceptor {
} }
ApiResponse apiResponse =null; ApiResponse apiResponse =null;
if (checkIp(request)){ String token = request.getHeader("access_token");
if (checkSign(params)){ if(StringUtil.isEmpty(token)){
return true; apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.AUTH_TOKEN_ERROR);
}else {
IPCheckEntity ipCheckEntity = ipCheckService.getOne(new QueryWrapper<IPCheckEntity>().eq("token", token));
if(ipCheckEntity != null){
// 校验token是否过期
if(checkToken(ipCheckEntity)){
if (checkIp(request, token)){
if (checkSign(params)){
IPCheckEntity entity = new IPCheckEntity();
entity.setLastCheckTime(new Date().getTime());
this.ipCheckService.update(entity, new UpdateWrapper<IPCheckEntity>().eq("token", token));
return true;
}else {
apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.AUTH_SIGN_ERROR);
}
}else {
apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.AUTH_IP_ERROR);
}
}else {
apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.TOKEN_OVERTIME_ERROR);
}
}else { }else {
apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.AUTH_SIGN_ERROR); apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.AUTH_TOKEN_ERROR);
} }
}else {
apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.AUTH_IP_ERROR);
} }
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
...@@ -78,6 +101,17 @@ public class TokenInterceptor implements HandlerInterceptor { ...@@ -78,6 +101,17 @@ public class TokenInterceptor implements HandlerInterceptor {
return false; return false;
} }
private boolean checkToken(IPCheckEntity ipCheckEntity){
Long lastTokenTime = ipCheckEntity.getLastTokenTime();
Date now = new Date();
long diff = now.getTime() - lastTokenTime;
if(diff < 1000*60*60*24){
return true;
}
return false;
}
/** /**
* @Description: 校验IP白名单 * @Description: 校验IP白名单
* @Param: [request] * @Param: [request]
...@@ -85,9 +119,9 @@ public class TokenInterceptor implements HandlerInterceptor { ...@@ -85,9 +119,9 @@ public class TokenInterceptor implements HandlerInterceptor {
* @Author: Wanjianbin * @Author: Wanjianbin
* @Date: 2019/8/27 * @Date: 2019/8/27
*/ */
private boolean checkIp(HttpServletRequest request) { private boolean checkIp(HttpServletRequest request, String token) {
String remoteAddr = ApiResultUtil.getUserIP(request); String remoteAddr = ApiResultUtil.getUserIP(request);
int i = ipCheckService.getBaseMapper().selectCount(new QueryWrapper<IPCheckEntity>().eq("ip_address", remoteAddr)); int i = ipCheckService.getBaseMapper().selectCount(new QueryWrapper<IPCheckEntity>().eq("ip_address", remoteAddr).eq("token", token));
if(i < 1){ if(i < 1){
return false; return false;
} }
...@@ -116,7 +150,7 @@ public class TokenInterceptor implements HandlerInterceptor { ...@@ -116,7 +150,7 @@ public class TokenInterceptor implements HandlerInterceptor {
// params.remove("sign"); // params.remove("sign");
// String paramsString = JSON.toJSONString(params); // String paramsString = JSON.toJSONString(params);
if(AlipaySignature.rsaCheckV2(params, publicKey, "UTF-8")){ if(!AlipaySignature.rsaCheckV2(params, publicKey, "UTF-8")){
log.info("-------------------- HTTP END, TOKEN ERROR : {}--------------------", sign); log.info("-------------------- HTTP END, TOKEN ERROR : {}--------------------", sign);
return false; return false;
} }
......
package com.cesgroup.kingkong.web; package com.cesgroup.kingkong.web;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cesgroup.common.utils.ApiResponse; import com.cesgroup.common.utils.ApiResponse;
import com.cesgroup.common.utils.ApiResponseEnum; import com.cesgroup.common.utils.ApiResponseEnum;
import com.cesgroup.common.utils.ApiResultUtil; import com.cesgroup.common.utils.ApiResultUtil;
import com.cesgroup.kingkong.commons.utils.JwtUtils;
import com.cesgroup.kingkong.core.security.model.JwtUser;
import com.cesgroup.kingkong.entity.IPCheckEntity; import com.cesgroup.kingkong.entity.IPCheckEntity;
import com.cesgroup.kingkong.interceptor.RequiredPermission;
import com.cesgroup.kingkong.service.IPCheckService; import com.cesgroup.kingkong.service.IPCheckService;
import com.cesgroup.kingkong.web.bind.annotation.KingkongRestController; import com.cesgroup.kingkong.web.bind.annotation.KingkongRestController;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import java.util.Date;
/** /**
* @program: kyb-search * @program: kyb-search
* @description: 测试接口 * @description: token
* @author: Wanjianbin * @author: Wanjianbin
* @create: 2019-08-27 15:32 * @create: 2019-08-27 15:32
**/ **/
@KingkongRestController @KingkongRestController
@RequestMapping("/test") @RequestMapping("/token")
public class TestController extends BaseServiceController<IPCheckEntity, IPCheckService> { public class TokenController extends BaseServiceController<IPCheckEntity, IPCheckService> {
@PostMapping @PostMapping("/getToken")
public ApiResponse test(Map params){ @RequiredPermission
public ApiResponse getToken(HttpServletRequest request){
String ip = ApiResultUtil.getUserIP(request);
IPCheckEntity ipCheckEntity = this.service.getOne(new QueryWrapper<IPCheckEntity>().eq("ip_address", ip));
JwtUser user = new JwtUser();
user.setId(ipCheckEntity.getId().toString());
user.setUserName(ip);
user.setLoginName(ip);
String token = JwtUtils.createJwtBySimpleUser(user, 1000*60*60*24, ApiResponseEnum.AUTH_CENTER_SERVICE);
ipCheckEntity.setToken(token);
ipCheckEntity.setLastTokenTime(new Date().getTime());
this.service.updateById(ipCheckEntity);
return ApiResultUtil.getApiResponse(token, ApiResponseEnum.SUCCESS);
}
@RequestMapping("/test")
public ApiResponse test(){
return ApiResultUtil.getApiResponse(null, ApiResponseEnum.SUCCESS); return ApiResultUtil.getApiResponse(null, ApiResponseEnum.SUCCESS);
} }
} }
spring: spring:
datasource: datasource:
url: jdbc:sqlite::resource:db/kyb-search.db url: jdbc:sqlite:kyb-search.db
username: username:
password: password:
driverClassName: org.sqlite.JDBC driverClassName: org.sqlite.JDBC
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment