Commit 106f3c4f authored by 万建斌's avatar 万建斌

20190827 添加签名

parent 33ce45d9
...@@ -63,7 +63,31 @@ ...@@ -63,7 +63,31 @@
<artifactId>spring-boot-devtools</artifactId> <artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.pentahohub.nexus</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>20150820220052</version>
</dependency>
</dependencies> </dependencies>
......
...@@ -10,7 +10,6 @@ public enum ApiResponseEnum { ...@@ -10,7 +10,6 @@ public enum ApiResponseEnum {
* API调用成功返回 * API调用成功返回
*/ */
SUCCESS(10000,"请求成功"), SUCCESS(10000,"请求成功"),
DATA_EXIST(10101,"数据库中已存在该记录"),
/** /**
* 系统错误 * 系统错误
*/ */
...@@ -20,24 +19,8 @@ public enum ApiResponseEnum { ...@@ -20,24 +19,8 @@ public enum ApiResponseEnum {
/** /**
* 参数错误 * 参数错误
*/ */
PARAM_ERROR(10201,"参数错误,访问失败"), AUTH_SIGN_ERROR(10201,"签名验证失败"),
REDELEGATION_ERROR(10202, "系统错误,请重新授权"), AUTH_IP_ERROR(10202,"IP白名单验证失败"),
AUTHCODE_ERROR(10203, "验证码错误,请重新输入"),
NOPEAPLE_ERROR(10204, "查无此人,请重新输入或联系管理员"),
AUTHORIZE_ERROR(10205, "授权失败,请重新登录"),
TIMELESS_ERROR(10206, "请求频繁"),
CODEOUT_ERROR(102007, "验证码过期"),
EXCHANGED_ERROR(10208, "无兑换资格"),
INTEGRAL_ERROR(10209, "可用积分不足"),
GOODSNUM_ERROR(10269, "库存不足"),
SIGN_ERROR(10270,"签到失败"),
AUTH_ERROR(10271,"token验证失败"),
OVERTIME(10272,"token超时"),
NOT_FIRST_BAODAO_ERROR(10273, "已报到党员请进入二次报到页面"),
ORG_NO_REGIST(10274, "所在党组织尚未报到"),
PHONE_REPEAT_ERROR(10275, "手机号重复,请更换手机号操作或联系管理员进行修改"),
OPENID_REPEAT_ERROR(10276, "系统检测到存在账号风险,请勿使用过他人手机进行绑定"),
OPENID_GET_ERROR(10277, "系统维护中,请等待微信公众号开放入口"),
; ;
private int errCode = 0; private int errCode = 0;
......
...@@ -2,6 +2,8 @@ package com.cesgroup.common.utils; ...@@ -2,6 +2,8 @@ package com.cesgroup.common.utils;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import javax.servlet.http.HttpServletRequest;
/** /**
* web层统一返回工具类 * web层统一返回工具类
*/ */
...@@ -47,6 +49,49 @@ public class ApiResultUtil { ...@@ -47,6 +49,49 @@ public class ApiResultUtil {
j.setState(state); j.setState(state);
return j; return j;
} }
/**
*
* @author HuaZai
* @contact who.seek.me@java98k.vip
* @title getUserIP
* <ul>
* @description 获取用户真实的IP地址
* </ul>
* @createdTime 2017年12月30日 下午6:42:17
* @param request
* @return String
*
* @version : V1.0.0
*/
public static String getUserIP(HttpServletRequest request){
String ERROR_IP = "127.0.0.1";
// 优先取 X-Real-IP
String ip = request.getHeader("X-Real-IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("x-forwarded-for");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getRemoteAddr();
if ("0:0:0:0:0:0:0:1".equals(ip))
{
ip = ERROR_IP;
}
}
if ("unknown".equalsIgnoreCase(ip))
{
ip = ERROR_IP;
return ip;
}
int index = ip.indexOf(',');
if (index >= 0)
{
ip = ip.substring(0, index);
}
return ip;
}
} }
/**
* eip
* cn.sh.ideal.core.util.JSONOperateResult.java
*/
package com.cesgroup.common.utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* 提供给DataGrid控件的JSON对象
*
*/
public class JsonDataGrid<T> {
/** 记录集合* */
private List<T> rows = new ArrayList<>();
/** 总记录* */
private long total = 0;
// 总页数
private long pageCount = 0;
// 当前页
private int pageIndex = 0;
private String state;
private String msg;
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public long getPageCount() {
return pageCount;
}
public void setPageCount(long pageCount) {
this.pageCount = pageCount;
}
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
}
/**
* 添加数据集合
*
* @param items
*/
public void addAll(Collection<T> items) {
this.rows.addAll(items);
}
/**
* 添加数据
*
* @param obj
*/
public void addItem(T obj) {
this.rows.add(obj);
}
/**
* 移除数据
*
* @param obj
*/
public void removeItem(T obj) {
this.rows.remove(obj);
}
public List<T> getRows() {
return rows;
}
public void setRows(List<T> rows) {
this.rows = rows;
}
public long getTotal() {
return total;
}
/** 总记录* */
public void setTotal(long total) {
this.total = total;
}
}
package com.cesgroup.common.utils;
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections.MapUtils;
import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
/**
* @program: kyb-search
* @description: RSA加/解密
* @author: Wanjianbin
* @create: 2019-08-27 13:45
**/
public class RSAEncryptUtil {
/**
* 签名算法
*/
public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
/**
* 字符集
*/
private static String CHARSET = "UTF-8";
public static void main(String[] args) throws Exception {
//生成公钥和私钥
Map keyMap = new HashMap();
keyMap.put("publicKey", "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJLuCIAqbnO1eunvgp3vby+2s0RnpNq3OFNpIQqStuTVIbedulgS2mEPASi9k5eHlc5n7MlHZMxdNRlBzo81EVa7bVCdS9nw2kMPNJoKLUX0RA8NFIYpkXakocDwCl1J8kNWuN1dMwQOZ7JPZQJaer9aAY/tu2aVpJG+CKTbQHRQIDAQAB");
keyMap.put("privateKey", "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIku4IgCpuc7V66e+Cne9vL7azRGek2rc4U2khCpK25NUht526WBLaYQ8BKL2Tl4eVzmfsyUdkzF01GUHOjzURVrttUJ1L2fDaQw80mgotRfREDw0UhimRdqShwPAKXUnyQ1a43V0zBA5nsk9lAlp6v1oBj+27ZpWkkb4IpNtAdFAgMBAAECgYA8aHsRCXHrovMSfwgyj+9YwiPMCjjzGMuu3n/lfEkWsk+0r61sLP0oAo9k61ZFe2qd4RX3Cm0pk3dhlgJBBlwumHuX+E+i15gWJT/RBLzulJx6yUMs8SZsfLIyswHIuNUzhuCFk0GwzcHtG1w9VyQkklhUGebsCZbhKmNfdSsipQJBAMCiYmf4c+fdWBOJt+G094XKzchNtkB4QALBR9boJlbyOOqT4U/dNlPUb8PMs2GDfqhSML0lOL4Zg7hKWbpvtqMCQQC2TvtLnTBul2LfybClf0uWMsg9VXfIzkjuSJDlvprFksPaOnIBUI37s2CbWfOZJkgofeKPRPI+Tbl24nPhpvD3AkEAnHIE652bPF7GTi/V2Afp0o3vbFK4xkki61nfp0ipAon78X8iSINGwPRRxLn1oSdy8O63SJX3LGR6VmyDzOc3cwJATvlr9teDMYU2+ca/VRINxmT9RUSO/VgPU9nvmva0yT3IxfJnjJY+y3hrMyEGW6Ovwoq16GZvofm9i/iRRoExBQJAAjc8qZDi9PM0TrNc75V/xfUatKl52QWiCSFHn8biPYtKn02a3ZRnhp+Dk2UNRXSlnveULMa/tqI5MQ1VYleD6Q==");
//加密字符串
String message = "{" +
"\"loginName\": \"superadmin\"," +
"\"password\": \"password123\"," +
"\"flag\": 0" +
"}";
System.out.println("随机生成的公钥为:" + MapUtils.getString(keyMap, "publicKey"));
System.out.println("随机生成的私钥为:" + MapUtils.getString(keyMap, "privateKey"));
try {
/*
* 拼接待签名字符串 RSA2对应的函数
*/
Map map = new HashMap();
map.put("loginName", "superadmin");
map.put("password", "password123");
map.put("flag", "0");
// String content = AlipaySignature.getSignCheckContentV2(map);
String content = JSON.toJSONString(map);
System.out.println("拼接待签名字符串:"+content);
/*
* 对数据签名 RSA2对应的函数和密钥
*/
// String sign = AlipaySignature.rsaSign(map, MapUtils.getString(keyMap, "privateKey"), CHARSET);
String sign = sign(content, MapUtils.getString(keyMap, "privateKey"));
System.out.println("原始sign:" + sign);
// map.put("sign", sign);
/*
* 进入验签流程
*/
// boolean result = AlipaySignature.rsaCheckV2(map, MapUtils.getString(keyMap, "publicKey"), CHARSET);
boolean result = doCheck(content, sign, MapUtils.getString(keyMap, "publicKey"), CHARSET);
System.out.println("验签结果:" + result);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static String sign(String content, String privateKey) {
try {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
Base64.decodeBase64(privateKey));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature signature = java.security.Signature
.getInstance(SIGN_ALGORITHMS);
signature.initSign(priKey);
signature.update(content.getBytes(CHARSET));
byte[] signed = signature.sign();
return Base64.encodeBase64String(signed);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* RSA验签名检查
*
* @param content
* 待签名数据
* @param sign
* 签名值
* @param publicKey
* 分配给开发商公钥
* @param encode
* 字符集编码
* @return 布尔值
*/
public static boolean doCheck(String content, String sign, String publicKey, String encode) {
try {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] encodedKey = Base64.decodeBase64(publicKey);
PublicKey pubKey = keyFactory
.generatePublic(new X509EncodedKeySpec(encodedKey));
java.security.Signature signature = java.security.Signature
.getInstance(SIGN_ALGORITHMS);
signature.initVerify(pubKey);
signature.update(content.getBytes(encode));
boolean bverify = signature.verify(Base64.decodeBase64(sign));
return bverify;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 随机生成密钥对
* @throws NoSuchAlgorithmException
*/
public static Map genKeyPair() throws NoSuchAlgorithmException {
Map keyMap = new HashMap();
// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器,密钥大小为96-1024位
keyPairGen.initialize(1024,new SecureRandom());
// 生成一个密钥对,保存在keyPair中
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到私钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 得到公钥
String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
// 得到私钥字符串
String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
// 将公钥和私钥保存到Map
keyMap.put("publicKey", publicKeyString); //0表示公钥
keyMap.put("privateKey", privateKeyString); //1表示私钥
return keyMap;
}
/**
* RSA公钥加密
*
* @param str
* 加密字符串
* @param publicKey
* 公钥
* @return 密文
* @throws Exception
* 加密过程中的异常信息
*/
public static String encrypt(String str, String publicKey) throws Exception{
//base64编码的公钥
byte[] decoded = Base64.decodeBase64(publicKey);
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
//RSA加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
return outStr;
}
/**
* RSA私钥解密
*
* @param str
* 加密字符串
* @param privateKey
* 私钥
* @return 铭文
* @throws Exception
* 解密过程中的异常信息
*/
public static String decrypt(String str, String privateKey) throws Exception{
//64位解码加密后的字符串
byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));
//base64编码的私钥
byte[] decoded = Base64.decodeBase64(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
//RSA解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
String outStr = new String(cipher.doFinal(inputByte));
return outStr;
}
}
package com.cesgroup.kingkong.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* @program: kyb-search
* @description: ip白名单实体类
* @author: Wanjianbin
* @create: 2019-08-27 14:32
**/
@Data
@TableName("ip_check")
public class IPCheckEntity {
@TableId
private Integer id;
private String ipAddress;
private Date lastCheckTime;
}
package com.cesgroup.kingkong.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* @program: kyb-search
* @description: 密钥对实体类
* @author: Wanjianbin
* @create: 2019-08-27 14:31
**/
@Data
@TableName("secret_key")
public class SecretKeyEntity {
@TableId
private Integer id;
private String publicKey;
private String privateKey;
}
package com.cesgroup.kingkong.interceptor;
import java.lang.annotation.*;
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface RequiredPermission {
}
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.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.ApiResultUtil;
import com.cesgroup.common.utils.RSAEncryptUtil;
import com.cesgroup.kingkong.entity.IPCheckEntity;
import com.cesgroup.kingkong.entity.SecretKeyEntity;
import com.cesgroup.kingkong.service.IPCheckService;
import com.cesgroup.kingkong.service.SecretKeyService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor; 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.Map;
/** /**
* @program: kyb-search * @program: kyb-search
...@@ -20,11 +35,113 @@ import java.io.PrintWriter; ...@@ -20,11 +35,113 @@ import java.io.PrintWriter;
@Component @Component
public class TokenInterceptor implements HandlerInterceptor { public class TokenInterceptor implements HandlerInterceptor {
@Autowired
private IPCheckService ipCheckService;
@Autowired
private SecretKeyService secretKeyService;
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("--------------------HTTP BEGIN, PREHANDLE BEGIN--------------------");
log.info("--------------------REQUEST URI IS: {}", request.getRequestURI());
log.info("--------------------PARAMS BEGIN--------------------");
Map<String, String[]> params = request.getParameterMap();
for (Map.Entry<String, String[]> entry : params.entrySet()){
String[] values = entry.getValue();
StringBuilder sb = new StringBuilder();
for (String value : values) {
sb.append(value + " ");
}
log.info(entry.getKey() + " : " + sb.toString());
}
log.info("--------------------PARAMS END----------------------");
// 免校验接口
if (hasPermission(handler)){
log.info("NO TOKENINTERCEPTOR, GOING TO CONTROLLER");
return true;
}
ApiResponse apiResponse =null;
if (checkIp(request)){
if (checkSign(params)){
return true;
}else {
apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.AUTH_SIGN_ERROR);
}
}else {
apiResponse = ApiResultUtil.getApiResponse(null, ApiResponseEnum.AUTH_IP_ERROR);
}
response.setCharacterEncoding("utf-8");
responseMessage(response,response.getWriter(),apiResponse);
return false; return false;
} }
/**
* @Description: 校验IP白名单
* @Param: [request]
* @return: boolean
* @Author: Wanjianbin
* @Date: 2019/8/27
*/
private boolean checkIp(HttpServletRequest request) {
String remoteAddr = ApiResultUtil.getUserIP(request);
int i = ipCheckService.getBaseMapper().selectCount(new QueryWrapper<IPCheckEntity>().eq("ip_address", remoteAddr));
if(i < 1){
return false;
}
return true;
}
/**
* @Description: 校验签名
* @Param:
* @return:
* @Author: Wanjianbin
* @Date: 2019/8/27
*/
private boolean checkSign(Map params) throws Exception{
String sign = MapUtils.getString(params, "sign");
if (StringUtils.isEmpty(sign)){
return false;
}
SecretKeyEntity secretKeyEntity = secretKeyService.getById(1);
if(secretKeyEntity == null){
log.info("-------------------- secretKey SELECT ERROR --------------------");
return false;
}
String publicKey = secretKeyEntity.getPublicKey();
// params.remove("sign");
// String paramsString = JSON.toJSONString(params);
if(AlipaySignature.rsaCheckV2(params, publicKey, "UTF-8")){
log.info("-------------------- HTTP END, TOKEN ERROR : {}--------------------", sign);
return false;
}
return true;
}
/**
* 是否有权限
*
* @param handler
* @return
*/
private boolean hasPermission(Object handler) {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 获取方法上的注解
RequiredPermission requiredPermission = handlerMethod.getMethod().getAnnotation(RequiredPermission.class);
// 如果方法上的注解为空 进行拦截
if (requiredPermission == null) {
return false;
}
}
return true;
}
/** /**
* 返回信息给客户端 * 返回信息给客户端
......
package com.cesgroup.kingkong.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class TokenWebMvcConfigurerAdapter implements WebMvcConfigurer {
@Autowired
private TokenInterceptor tokenInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tokenInterceptor).addPathPatterns("/**");
}
}
package com.cesgroup.kingkong.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cesgroup.kingkong.entity.IPCheckEntity;
/**
* @program: kyb-search
* @description: IP白名单
* @author: Wanjianbin
* @create: 2019-08-27 14:55
**/
public interface IPCheckMapper extends BaseMapper<IPCheckEntity> {
}
package com.cesgroup.kingkong.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cesgroup.kingkong.entity.SecretKeyEntity;
/**
* @program: kyb-search
* @description: 密钥对
* @author: Wanjianbin
* @create: 2019-08-27 14:55
**/
public interface SecretKeyMapper extends BaseMapper<SecretKeyEntity> {
}
package com.cesgroup.kingkong.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cesgroup.kingkong.entity.IPCheckEntity;
/**
* @program: kyb-search
* @description: ip白名单
* @author: Wanjianbin
* @create: 2019-08-27 14:59
**/
public interface IPCheckService extends IService<IPCheckEntity> {
}
package com.cesgroup.kingkong.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cesgroup.kingkong.entity.SecretKeyEntity;
/**
* @program: kyb-search
* @description: 密钥对
* @author: Wanjianbin
* @create: 2019-08-27 14:58
**/
public interface SecretKeyService extends IService<SecretKeyEntity> {
}
package com.cesgroup.kingkong.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cesgroup.kingkong.entity.IPCheckEntity;
import com.cesgroup.kingkong.mapper.IPCheckMapper;
import com.cesgroup.kingkong.service.IPCheckService;
import org.springframework.stereotype.Service;
/**
* @program: kyb-search
* @description: ip白名单
* @author: Wanjianbin
* @create: 2019-08-27 15:01
**/
@Service
public class IPCheckServiceImpl extends ServiceImpl<IPCheckMapper, IPCheckEntity> implements IPCheckService {
}
package com.cesgroup.kingkong.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cesgroup.kingkong.entity.SecretKeyEntity;
import com.cesgroup.kingkong.mapper.SecretKeyMapper;
import com.cesgroup.kingkong.service.SecretKeyService;
import org.springframework.stereotype.Service;
/**
* @program: kyb-search
* @description: 密钥对
* @author: Wanjianbin
* @create: 2019-08-27 15:03
**/
@Service
public class SecretKeyServiceImpl extends ServiceImpl<SecretKeyMapper, SecretKeyEntity> implements SecretKeyService {
}
package com.cesgroup.kingkong.web;
import com.cesgroup.common.utils.ApiResponse;
import com.cesgroup.common.utils.ApiResponseEnum;
import com.cesgroup.common.utils.ApiResultUtil;
import com.cesgroup.kingkong.entity.IPCheckEntity;
import com.cesgroup.kingkong.service.IPCheckService;
import com.cesgroup.kingkong.web.bind.annotation.KingkongRestController;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map;
/**
* @program: kyb-search
* @description: 测试接口
* @author: Wanjianbin
* @create: 2019-08-27 15:32
**/
@KingkongRestController
@RequestMapping("/test")
public class TestController extends BaseServiceController<IPCheckEntity, IPCheckService> {
@PostMapping
public ApiResponse test(Map params){
return ApiResultUtil.getApiResponse(null, ApiResponseEnum.SUCCESS);
}
}
spring: spring:
datasource: datasource:
url: jdbc:mysql://localhost:3306/kyb_search?useUnicode=true&characterEncoding=utf-8&useSSL=false url: jdbc:sqlite::resource:db/kyb-search.db
username: root username:
password: root password:
driverClassName: com.mysql.jdbc.Driver driverClassName: org.sqlite.JDBC
initialSize: 5
minIdle: 5
maxActive: 20
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
###### 系统管理平台 START
spring.profiles.active=dev spring.profiles.active=dev
project.gen.base.path=d://projectG/gen \ No newline at end of file
\ No newline at end of file
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