代码拉取完成,页面将自动刷新
st-encrypt-sdk
Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密
3.0版本支持sprintgboot3.x,1.2.1支持springboot2.x
调用端发送的请求信息
{
key:RSA公钥加密(随机AES_KEY###时间搓t###appId###授权auth),使用###分隔,其中appId,授权auth可以为null
data:AES 加密(data数据)
}
服务器端
使用RSA私钥解密得到AES的KEY、授权Auth和appId ,可以验证本次请求是否有效
通过解密的到AES_key解密加密的data,获取到数据-->处理结果-->使用AES_key的key加密响应结果,并使用私钥进行MD5withRSA(data)签名内容,响应调用端
{
data:AES_key加密(data数据)
sign:私钥进行MD5withRSA(data)
}
安全是相对的,只看价值和付出
Maven
<dependency>
<groupId>vip.ylove</groupId>
<artifactId>st-encrypt-sdk</artifactId>
<version>3.0.1</version>
</dependency>
或者
<dependency>
<groupId>vip.ylove</groupId>
<artifactId>st-encrypt-sdk-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>vip.ylove</groupId>
<artifactId>st-encrypt-sdk-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
@SpringBootApplication
@StEnableSecurity
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
st:
encrypt:
privateKey: '' #rsa私钥 作为服务端时需要配置
publicKey: '' #rsa私钥 作为客户端时需要配置
appId: '' #appId 授权id 作为客户端时需要配置 也可以为空
auth: '' #auth 授权秘钥 作为客户端时需要配置 也可以为空
@StEncrypt
@PostMapping("/encrypt")
public BaseResult encrypt(@RequestBody Object form){
log.info("{}",form);
return BaseResult.success_(form);
}
@Service
public class StAuthService implements StAbstractAuth {
@Override
public boolean auth(String appId, String auth, String t, StEncrypt stEncrypt) {
//模拟进行授权验证
log.info("默认认证方式:appId[{}]-auth[{}]-t[{}]-stEncrypt[{}]",appId, auth,t,stEncrypt);
if ("123456".equals(appId) && "123456".equals(auth)) {
return true;
}
log.debug("授权验证未通过");
return false;
}
@Override
public String key() {
String key = StAbstractAuth.super.key();
//若没有获取到动态key,则可以在此处获取静态key,例如token,jwt中等
return key;
}
}
//加密请求参数
StResquestBody encrypt = StClientUtil.encrypt(stConfig.getPublicKey(),
System.currentTimeMillis(),
stConfig.getAppId(),
stConfig.getAppAuth(), form);
//发送请求
EncryptResult stEncryptBody = serverService.encrypt(encrypt);
Object result = null;
if( stEncryptBody.isSuccess()){
//解密数据
result = StClientUtil.dencrypt(stConfig.getPublicKey(), stEncryptBody);
}else{
result = stEncryptBody;
}
/**
* 配置加解密使用fastjson
*/
@Configuration
public class ConfigStJsonDcode {
@Bean
public StAbstractJsonDcode initStAbstractJsonCode(){
return new StAbstractJsonDcode(){
@Override
public String toJson(Object data) {
return JSONObject.toJSONString(data);
}
@Override
public <T> T toBean(String data, Class<T> cls) {
return JSONObject.parseObject(data,cls);
}
@Override
public <T> T toBean(byte[] data, Class<T> cls) {
return JSONObject.parseObject(data,cls);
}
};
}
}
- 在和springboot进行集成的时候,在一些场景下例如需要进行xss参数过滤时候, 参数已经被加密,许多框架是在filter层过滤处理就会失败,因为在filter层参数还是加密的状态 可以调整代码在HandlerInterceptor进行xss过滤, 可以参考代码vip.ylove.server.advice.dencrypt.StRequestHandlerIntercepter 这个类的代码进行处理
- 目前支持GET,POST等,包括一般get请求,post json请求,post表单请求,和文件上传请求 可以参考提供的demo实现客户端和第三方调用
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型