Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
kyb-search
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
万建斌
kyb-search
Commits
106f3c4f
Commit
106f3c4f
authored
Aug 27, 2019
by
万建斌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
20190827 添加签名
parent
33ce45d9
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
714 additions
and
29 deletions
+714
-29
pom.xml
pom.xml
+25
-1
ApiResponseEnum.java
src/main/java/com/cesgroup/common/utils/ApiResponseEnum.java
+2
-19
ApiResultUtil.java
src/main/java/com/cesgroup/common/utils/ApiResultUtil.java
+45
-0
JsonDataGrid.java
src/main/java/com/cesgroup/common/utils/JsonDataGrid.java
+111
-0
RSAEncryptUtil.java
src/main/java/com/cesgroup/common/utils/RSAEncryptUtil.java
+210
-0
IPCheckEntity.java
...main/java/com/cesgroup/kingkong/entity/IPCheckEntity.java
+25
-0
SecretKeyEntity.java
...in/java/com/cesgroup/kingkong/entity/SecretKeyEntity.java
+24
-0
RequiredPermission.java
...com/cesgroup/kingkong/interceptor/RequiredPermission.java
+11
-0
TokenInterceptor.java
...a/com/cesgroup/kingkong/interceptor/TokenInterceptor.java
+117
-0
TokenWebMvcConfigurerAdapter.java
...up/kingkong/interceptor/TokenWebMvcConfigurerAdapter.java
+20
-0
IPCheckMapper.java
...main/java/com/cesgroup/kingkong/mapper/IPCheckMapper.java
+13
-0
SecretKeyMapper.java
...in/java/com/cesgroup/kingkong/mapper/SecretKeyMapper.java
+13
-0
IPCheckService.java
...in/java/com/cesgroup/kingkong/service/IPCheckService.java
+13
-0
SecretKeyService.java
.../java/com/cesgroup/kingkong/service/SecretKeyService.java
+13
-0
IPCheckServiceImpl.java
...om/cesgroup/kingkong/service/impl/IPCheckServiceImpl.java
+17
-0
SecretKeyServiceImpl.java
.../cesgroup/kingkong/service/impl/SecretKeyServiceImpl.java
+17
-0
TestController.java
src/main/java/com/cesgroup/kingkong/web/TestController.java
+29
-0
application-dev.yml
src/main/resources/application-dev.yml
+7
-6
application.properties
src/main/resources/application.properties
+2
-3
kyb-search.db
src/main/resources/db/kyb-search.db
+0
-0
No files found.
pom.xml
View file @
106f3c4f
...
@@ -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>
...
...
src/main/java/com/cesgroup/common/utils/ApiResponseEnum.java
View file @
106f3c4f
...
@@ -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
;
...
...
src/main/java/com/cesgroup/common/utils/ApiResultUtil.java
View file @
106f3c4f
...
@@ -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
;
}
}
}
src/main/java/com/cesgroup/common/utils/JsonDataGrid.java
0 → 100644
View file @
106f3c4f
/**
* 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
;
}
}
src/main/java/com/cesgroup/common/utils/RSAEncryptUtil.java
0 → 100644
View file @
106f3c4f
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
;
}
}
src/main/java/com/cesgroup/kingkong/entity/IPCheckEntity.java
0 → 100644
View file @
106f3c4f
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
;
}
src/main/java/com/cesgroup/kingkong/entity/SecretKeyEntity.java
0 → 100644
View file @
106f3c4f
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
;
}
src/main/java/com/cesgroup/kingkong/interceptor/RequiredPermission.java
0 → 100644
View file @
106f3c4f
package
com
.
cesgroup
.
kingkong
.
interceptor
;
import
java.lang.annotation.*
;
@Target
({
ElementType
.
TYPE
,
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Inherited
@Documented
public
@interface
RequiredPermission
{
}
src/main/java/com/cesgroup/kingkong/interceptor/TokenInterceptor.java
View file @
106f3c4f
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
;
}
/**
/**
* 返回信息给客户端
* 返回信息给客户端
...
...
src/main/java/com/cesgroup/kingkong/interceptor/TokenWebMvcConfigurerAdapter.java
0 → 100644
View file @
106f3c4f
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
(
"/**"
);
}
}
src/main/java/com/cesgroup/kingkong/mapper/IPCheckMapper.java
0 → 100644
View file @
106f3c4f
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
>
{
}
src/main/java/com/cesgroup/kingkong/mapper/SecretKeyMapper.java
0 → 100644
View file @
106f3c4f
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
>
{
}
src/main/java/com/cesgroup/kingkong/service/IPCheckService.java
0 → 100644
View file @
106f3c4f
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
>
{
}
src/main/java/com/cesgroup/kingkong/service/SecretKeyService.java
0 → 100644
View file @
106f3c4f
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
>
{
}
src/main/java/com/cesgroup/kingkong/service/impl/IPCheckServiceImpl.java
0 → 100644
View file @
106f3c4f
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
{
}
src/main/java/com/cesgroup/kingkong/service/impl/SecretKeyServiceImpl.java
0 → 100644
View file @
106f3c4f
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
{
}
src/main/java/com/cesgroup/kingkong/web/TestController.java
0 → 100644
View file @
106f3c4f
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
);
}
}
src/main/resources/application-dev.yml
View file @
106f3c4f
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
src/main/resources/application.properties
View file @
106f3c4f
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
src/main/resources/db/kyb-search.db
0 → 100644
View file @
106f3c4f
File added
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment