上传
This commit is contained in:
@@ -31,7 +31,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.18.28</version>
|
<version>1.18.24</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.13.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.8</source>
|
<source>1.8</source>
|
||||||
<target>1.8</target>
|
<target>1.8</target>
|
||||||
@@ -22,7 +23,7 @@
|
|||||||
<path>
|
<path>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.18.20</version>
|
<version>1.18.24</version>
|
||||||
</path>
|
</path>
|
||||||
<!-- 必须要加, 否则生成不了 MapperImpl 实现类 -->
|
<!-- 必须要加, 否则生成不了 MapperImpl 实现类 -->
|
||||||
<path>
|
<path>
|
||||||
|
@@ -0,0 +1,32 @@
|
|||||||
|
package com.schisandra.auth.application.config;
|
||||||
|
|
||||||
|
import com.schisandra.auth.application.convert.SchisandraSmsConfigDTOConvert;
|
||||||
|
import com.schisandra.auth.application.dto.SchisandraSmsConfigDTO;
|
||||||
|
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||||
|
import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService;
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.event.ContextRefreshedEvent;
|
||||||
|
import org.springframework.context.event.EventListener;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
@Configuration
|
||||||
|
public class SmsInitConfig {
|
||||||
|
@Resource
|
||||||
|
SmsReadConfig smsReadConfig;
|
||||||
|
@Resource
|
||||||
|
SchisandraSmsConfigDomainService schisandraSmsConfigDomainService;
|
||||||
|
@EventListener
|
||||||
|
public void init(ContextRefreshedEvent event){
|
||||||
|
List<SchisandraSmsConfigBO> SchisandraSmsConfigBOs= schisandraSmsConfigDomainService.queryAll();
|
||||||
|
List<SchisandraSmsConfigDTO> schisandraSmsConfigDTOS = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTOList(SchisandraSmsConfigBOs);
|
||||||
|
for (SchisandraSmsConfigDTO schisandraSmsConfig : schisandraSmsConfigDTOS){
|
||||||
|
System.out.println(schisandraSmsConfig.toString());
|
||||||
|
if (schisandraSmsConfig!=null){
|
||||||
|
// 创建SmsBlend 短信实例
|
||||||
|
SmsFactory.createSmsBlend(smsReadConfig);
|
||||||
|
};
|
||||||
|
}}
|
||||||
|
}
|
@@ -0,0 +1,89 @@
|
|||||||
|
package com.schisandra.auth.application.config;
|
||||||
|
|
||||||
|
import com.schisandra.auth.application.convert.SchisandraSmsConfigDTOConvert;
|
||||||
|
import com.schisandra.auth.application.dto.SchisandraSmsConfigDTO;
|
||||||
|
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||||
|
import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService;
|
||||||
|
import com.schisandra.auth.infra.basic.dao.SchisandraSmsConfigDao;
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
import org.dromara.sms4j.aliyun.config.AlibabaConfig;
|
||||||
|
import org.dromara.sms4j.huawei.config.HuaweiConfig;
|
||||||
|
import org.dromara.sms4j.provider.config.BaseConfig;
|
||||||
|
import org.dromara.sms4j.tencent.config.TencentConfig;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Classname SmsConfig
|
||||||
|
* @BelongsProject: schisandra-cloud-storage
|
||||||
|
* @BelongsPackage: com.schisandra.auth.common.config
|
||||||
|
* @Author: landaiqing
|
||||||
|
* @CreateTime: 2024-05-08 18:46
|
||||||
|
* @Description: TODO
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class SmsReadConfig implements org.dromara.sms4j.core.datainterface.SmsReadConfig {
|
||||||
|
@Resource
|
||||||
|
SchisandraSmsConfigDomainService schisandraSmsConfigDomainService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseConfig getSupplierConfig(String configId) {
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BaseConfig> getSupplierConfigList() {
|
||||||
|
List<BaseConfig> configs = new ArrayList<>();
|
||||||
|
List<SchisandraSmsConfigBO> SchisandraSmsConfigBOs= schisandraSmsConfigDomainService.queryAll();
|
||||||
|
List<SchisandraSmsConfigDTO> schisandraSmsConfigDTOS = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTOList(SchisandraSmsConfigBOs);
|
||||||
|
for (SchisandraSmsConfigDTO schisandraSmsConfig : schisandraSmsConfigDTOS){
|
||||||
|
if ("alibaba".equals(schisandraSmsConfig.getConfigId())) {
|
||||||
|
AlibabaConfig alibabaConfig = new AlibabaConfig();
|
||||||
|
alibabaConfig.setConfigId(schisandraSmsConfig.getConfigId());
|
||||||
|
alibabaConfig.setRequestUrl(schisandraSmsConfig.getRequestUrl());
|
||||||
|
alibabaConfig.setAccessKeyId(schisandraSmsConfig.getAccessKeyId());
|
||||||
|
alibabaConfig.setAccessKeySecret(schisandraSmsConfig.getAccessKeySecret());
|
||||||
|
alibabaConfig.setSignature(schisandraSmsConfig.getSignature());
|
||||||
|
alibabaConfig.setTemplateId(schisandraSmsConfig.getTemplateId());
|
||||||
|
alibabaConfig.setTemplateName(schisandraSmsConfig.getTemplateName());
|
||||||
|
alibabaConfig.setSdkAppId(schisandraSmsConfig.getSdkAppId());
|
||||||
|
configs.add(alibabaConfig);
|
||||||
|
}
|
||||||
|
if ("tencent".equals(schisandraSmsConfig.getConfigId())) {
|
||||||
|
TencentConfig tencentConfig=new TencentConfig();
|
||||||
|
tencentConfig.setConfigId(schisandraSmsConfig.getConfigId());
|
||||||
|
tencentConfig.setAccessKeyId(schisandraSmsConfig.getAccessKeyId());
|
||||||
|
tencentConfig.setAccessKeySecret(schisandraSmsConfig.getAccessKeySecret());
|
||||||
|
tencentConfig.setSdkAppId(schisandraSmsConfig.getSdkAppId());
|
||||||
|
tencentConfig.setService(schisandraSmsConfig.getSdkAppId());
|
||||||
|
tencentConfig.setRequestUrl(schisandraSmsConfig.getRequestUrl());
|
||||||
|
tencentConfig.setTerritory(schisandraSmsConfig.getRegion());
|
||||||
|
tencentConfig.setAction(schisandraSmsConfig.getAction());
|
||||||
|
tencentConfig.setSignature(schisandraSmsConfig.getSignature());
|
||||||
|
tencentConfig.setTemplateId(schisandraSmsConfig.getTemplateId());
|
||||||
|
tencentConfig.setVersion(schisandraSmsConfig.getVersion());
|
||||||
|
tencentConfig.setConnTimeout(schisandraSmsConfig.getConnTimeout());
|
||||||
|
tencentConfig.setSdkAppId(schisandraSmsConfig.getSdkAppId());
|
||||||
|
configs.add(tencentConfig);
|
||||||
|
}
|
||||||
|
if ("huawei".equals(schisandraSmsConfig.getConfigId())) {
|
||||||
|
HuaweiConfig huaweiConfig = new HuaweiConfig();
|
||||||
|
huaweiConfig.setConfigId(schisandraSmsConfig.getConfigId());
|
||||||
|
huaweiConfig.setSdkAppId(schisandraSmsConfig.getSdkAppId());
|
||||||
|
huaweiConfig.setAccessKeySecret(schisandraSmsConfig.getAccessKeySecret());
|
||||||
|
huaweiConfig.setAccessKeyId(schisandraSmsConfig.getAccessKeyId());
|
||||||
|
huaweiConfig.setUrl(schisandraSmsConfig.getUrl());
|
||||||
|
huaweiConfig.setSignature(schisandraSmsConfig.getSignature());
|
||||||
|
huaweiConfig.setTemplateId(schisandraSmsConfig.getTemplateId());
|
||||||
|
configs.add(huaweiConfig);
|
||||||
|
}}
|
||||||
|
return configs;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,107 @@
|
|||||||
|
package com.schisandra.auth.application.controller;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Assert;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/ReactRotateCaptcha/")
|
||||||
|
@Slf4j
|
||||||
|
public class ReactRotateCaptchaController {
|
||||||
|
@PostMapping (value = "get", produces = MediaType.IMAGE_PNG_VALUE)
|
||||||
|
public ResponseEntity<String> get(){
|
||||||
|
//前端可以直接根据URL:/image/{图片id} 来获取图片 注意:资源文件ID最好进行加密和设置有效期
|
||||||
|
// 在实际开发中 一般先通过图片id查看数据库有没有这条记录
|
||||||
|
|
||||||
|
String imageFilePath = "D:\\java_project\\schisandra-cloud-storage\\schisandra-cloud-storage-auth\\schisandra-cloud-storage-auth-application\\schisandra-cloud-storage-auth-application-controller\\src\\main\\java\\com\\schisandra\\auth\\application\\image\\test1.png";
|
||||||
|
File file = new File(imageFilePath);
|
||||||
|
try {
|
||||||
|
BufferedImage bufferedImage = ImageIO.read(file);
|
||||||
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||||
|
ImageIO.write(bufferedImage, "png", byteArrayOutputStream);
|
||||||
|
byte[] imageBytes = byteArrayOutputStream.toByteArray(); // 读取图片数据的字节数组
|
||||||
|
// 将图片字节数组转换为Base64编码的字符串
|
||||||
|
String base64Image = Base64.getEncoder().encodeToString(imageBytes);
|
||||||
|
System.out.println(base64Image);
|
||||||
|
// 创建包含Base64编码的响应体的ResponseEntity对象,并设置正确的媒体类型和内容长度
|
||||||
|
return ResponseEntity.ok().contentType(MediaType.IMAGE_PNG)
|
||||||
|
.body(base64Image);
|
||||||
|
}catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return ResponseEntity.ok().body(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求图片地址, 返回的结果进行base64编码
|
||||||
|
* @param imgUrl 图片地址
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
// public static String requestUrlToBase64(String imgUrl) {
|
||||||
|
// //读取图片字节数组
|
||||||
|
// byte[] data = null;
|
||||||
|
// try {
|
||||||
|
// InputStream in = new FileInputStream(imgUrl);
|
||||||
|
//// System.out.println("文件大小(字节)=" + in.available());
|
||||||
|
// data = new byte[in.available()];
|
||||||
|
// in.read(data);
|
||||||
|
// in.close();
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// //对字节数组进行Base64编码,得到Base64编码的字符串
|
||||||
|
// return new String(Base64.encodeBase64(data));
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static File convertBase64ToFile(String fileBase64String, String filePath, String fileName) {
|
||||||
|
// BufferedOutputStream bos = null;
|
||||||
|
// FileOutputStream fos = null;
|
||||||
|
// File file = null;
|
||||||
|
// try {
|
||||||
|
// File dir = new File(filePath);
|
||||||
|
// //判断文件目录是否存在
|
||||||
|
// if (!dir.exists() && dir.isDirectory()) {
|
||||||
|
// dir.mkdirs();
|
||||||
|
// }
|
||||||
|
// byte[] bfile = Base64.decodeBase64(fileBase64String);
|
||||||
|
// file = new File(filePath + File.separator + fileName);
|
||||||
|
// fos = new FileOutputStream(file);
|
||||||
|
// bos = new BufferedOutputStream(fos);
|
||||||
|
// bos.write(bfile);
|
||||||
|
// return file;
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// } finally {
|
||||||
|
// if (bos != null) {
|
||||||
|
// try {
|
||||||
|
// bos.close();
|
||||||
|
// } catch (IOException e1) {
|
||||||
|
// e1.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (fos != null) {
|
||||||
|
// try {
|
||||||
|
// fos.close();
|
||||||
|
// } catch (IOException e1) {
|
||||||
|
// e1.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
@@ -1,16 +1,13 @@
|
|||||||
package com.schisandra.auth.application.controller;
|
package com.schisandra.auth.application.controller;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.google.common.base.Preconditions;
|
|
||||||
import com.schisandra.auth.application.convert.SchisandraAuthUserDTOConverter;
|
import com.schisandra.auth.application.convert.SchisandraAuthUserDTOConverter;
|
||||||
import com.schisandra.auth.application.dto.SchisandraAuthUserDTO;
|
import com.schisandra.auth.application.dto.SchisandraAuthUserDTO;
|
||||||
import com.schisandra.auth.common.entity.Result;
|
import com.schisandra.auth.common.entity.Result;
|
||||||
import com.schisandra.auth.domain.bo.SchisandraAuthUserBO;
|
import com.schisandra.auth.domain.bo.SchisandraAuthUserBO;
|
||||||
import com.schisandra.auth.domain.service.SchisandraAuthUserDomainService;
|
import com.schisandra.auth.domain.service.SchisandraAuthUserDomainService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,7 +25,6 @@ import javax.annotation.Resource;
|
|||||||
public class SchisandraAuthUserController {
|
public class SchisandraAuthUserController {
|
||||||
@Resource
|
@Resource
|
||||||
private SchisandraAuthUserDomainService schisandraAuthUserDomainService;
|
private SchisandraAuthUserDomainService schisandraAuthUserDomainService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 更新用户信息
|
* @description 更新用户信息
|
||||||
* @param schisandraAuthUserDTO
|
* @param schisandraAuthUserDTO
|
||||||
|
@@ -0,0 +1,51 @@
|
|||||||
|
package com.schisandra.auth.application.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.schisandra.auth.common.entity.Result;
|
||||||
|
import com.schisandra.auth.common.redis.RedisUtil;
|
||||||
|
import com.schisandra.auth.common.utils.SmsCodeUtils;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.sms4j.api.entity.SmsResponse;
|
||||||
|
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/sms/")
|
||||||
|
@Slf4j
|
||||||
|
public class SchisandraSmsController {
|
||||||
|
@Resource
|
||||||
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
|
private final String authPhonePrefix="auth.phone";
|
||||||
|
/**
|
||||||
|
* @description: 发送短信验证码
|
||||||
|
* @param: [phone]
|
||||||
|
* @return: com.schisandra.auth.common.entity.Result
|
||||||
|
* @author zlg
|
||||||
|
* @date: 2024/5/8 22:53
|
||||||
|
*/
|
||||||
|
@GetMapping("/sendByTemplate")
|
||||||
|
public Result sendByTemplate(String phone) {
|
||||||
|
String prefix = redisUtil.buildKey(authPhonePrefix, phone);
|
||||||
|
String code = SmsCodeUtils.generateValidateCode(4).toString();
|
||||||
|
if (!redisUtil.exist(prefix)){
|
||||||
|
SmsResponse smsResponse=SmsFactory.getBySupplier("alibaba").sendMessage(phone,code);
|
||||||
|
if (smsResponse.isSuccess()){
|
||||||
|
redisUtil.setNx(prefix, code, 60L,SECONDS);
|
||||||
|
return Result.ok();
|
||||||
|
}else {
|
||||||
|
return Result.fail();
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
return Result.fail("发送频繁,请稍后重试");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,43 @@
|
|||||||
|
package com.schisandra.auth.application.convert;
|
||||||
|
|
||||||
|
import com.schisandra.auth.application.dto.SchisandraSmsConfigDTO;
|
||||||
|
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (SchisandraSmsConfig)实体类
|
||||||
|
*
|
||||||
|
* @author makejava
|
||||||
|
* @since 2024-05-08 20:09:54
|
||||||
|
*/
|
||||||
|
@Mapper(componentModel = "spring")
|
||||||
|
public interface SchisandraSmsConfigDTOConvert {
|
||||||
|
|
||||||
|
SchisandraSmsConfigDTOConvert INSTANCE = Mappers.getMapper(SchisandraSmsConfigDTOConvert.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 将bo转换为实体
|
||||||
|
* @param schisandraSmsConfigDTO
|
||||||
|
* @return com.schisandra.auth.infra.basic.entity.SchisandraAuthUser
|
||||||
|
* @author landaiqing
|
||||||
|
* @date 2024/3/21 23:13
|
||||||
|
*/
|
||||||
|
SchisandraSmsConfigBO convertDTOToBO(SchisandraSmsConfigDTO schisandraSmsConfigDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 将实体转换为bo
|
||||||
|
* @param schisandraSmsConfigBO
|
||||||
|
* @return com.schisandra.auth.domain.bo.SchisandraAuthUserBO
|
||||||
|
* @author landaiqing
|
||||||
|
* @date 2024/3/21 23:13
|
||||||
|
*/
|
||||||
|
SchisandraSmsConfigDTO convertBOToDTO(SchisandraSmsConfigBO schisandraSmsConfigBO);
|
||||||
|
|
||||||
|
List<SchisandraSmsConfigDTO> convertBOToDTOList(List<SchisandraSmsConfigBO> schisandraSmsConfigBO);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,155 @@
|
|||||||
|
package com.schisandra.auth.application.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (SchisandraSmsConfig)实体类
|
||||||
|
*
|
||||||
|
* @author makejava
|
||||||
|
* @since 2024-05-08 20:09:54
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class SchisandraSmsConfigDTO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
private Integer id;
|
||||||
|
/**
|
||||||
|
* 配置id
|
||||||
|
*/
|
||||||
|
private String configId;
|
||||||
|
/**
|
||||||
|
* 请求地址
|
||||||
|
*/
|
||||||
|
private String requestUrl;
|
||||||
|
/**
|
||||||
|
* 模板变量名称
|
||||||
|
*/
|
||||||
|
private String templateName;
|
||||||
|
/**
|
||||||
|
* 接口名称
|
||||||
|
*/
|
||||||
|
private String action;
|
||||||
|
/**
|
||||||
|
* 地域信息
|
||||||
|
*/
|
||||||
|
private String region;
|
||||||
|
|
||||||
|
private String accessKeyId;
|
||||||
|
|
||||||
|
private String accessKeySecret;
|
||||||
|
/**
|
||||||
|
* 厂商名称标识
|
||||||
|
*/
|
||||||
|
private String supplier;
|
||||||
|
/**
|
||||||
|
* 短信签名
|
||||||
|
*/
|
||||||
|
private String signature;
|
||||||
|
|
||||||
|
private String sdkAppId;
|
||||||
|
/**
|
||||||
|
* 模板ID
|
||||||
|
*/
|
||||||
|
private String templateId;
|
||||||
|
/**
|
||||||
|
* 权重
|
||||||
|
*/
|
||||||
|
private Integer weight;
|
||||||
|
/**
|
||||||
|
* 短信重试次数,默认0次不重试
|
||||||
|
*/
|
||||||
|
private Integer retryInterval;
|
||||||
|
/**
|
||||||
|
* 短信重试次数,默认0次不重试
|
||||||
|
*/
|
||||||
|
private Integer maxRetries;
|
||||||
|
/**
|
||||||
|
* 厂商的发送数量上限,默认不设置上限
|
||||||
|
*/
|
||||||
|
private Long maximum;
|
||||||
|
/**
|
||||||
|
* REST API Base URL
|
||||||
|
*/
|
||||||
|
private String baseUrl;
|
||||||
|
/**
|
||||||
|
* 请求域名
|
||||||
|
*/
|
||||||
|
private String serverIp;
|
||||||
|
/**
|
||||||
|
* 请求端口
|
||||||
|
*/
|
||||||
|
private Integer serverPort;
|
||||||
|
/**
|
||||||
|
* 国内短信签名通道号
|
||||||
|
*/
|
||||||
|
private String sender;
|
||||||
|
/**
|
||||||
|
* 短信状态报告接收地
|
||||||
|
*/
|
||||||
|
private String statusCallBack;
|
||||||
|
/**
|
||||||
|
* APP接入地址
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
/**
|
||||||
|
* 模板短信请求地址
|
||||||
|
*/
|
||||||
|
private String templateUrl;
|
||||||
|
/**
|
||||||
|
* 验证码短信请求地址
|
||||||
|
*/
|
||||||
|
private String codeUrl;
|
||||||
|
/**
|
||||||
|
* 验证码验证请求地址
|
||||||
|
*/
|
||||||
|
private String verifyUrl;
|
||||||
|
/**
|
||||||
|
* 是否需要支持短信上行。true:需要,false:不需要false
|
||||||
|
*/
|
||||||
|
private String needUp;
|
||||||
|
/**
|
||||||
|
* 请求超时时间
|
||||||
|
*/
|
||||||
|
private Integer connTimeout;
|
||||||
|
/**
|
||||||
|
* 是否为简易模式
|
||||||
|
*/
|
||||||
|
private String isSimple;
|
||||||
|
/**
|
||||||
|
* 短信发送后将向这个地址推送(运营商返回的)发送报告
|
||||||
|
*/
|
||||||
|
private String callbackUrl;
|
||||||
|
/**
|
||||||
|
* 企业ID
|
||||||
|
*/
|
||||||
|
private Integer mchId;
|
||||||
|
|
||||||
|
private String appKey;
|
||||||
|
|
||||||
|
private Integer appId;
|
||||||
|
/**
|
||||||
|
* 版本号
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
/**
|
||||||
|
* 单发链接
|
||||||
|
*/
|
||||||
|
private String singleMsgUrl;
|
||||||
|
/**
|
||||||
|
* 群发链接
|
||||||
|
*/
|
||||||
|
private String massMsgUrl;
|
||||||
|
/**
|
||||||
|
* 签名ID
|
||||||
|
*/
|
||||||
|
private String signatureId;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -36,7 +36,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.18.20</version>
|
<version>1.18.24</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mapstruct</groupId>
|
<groupId>org.mapstruct</groupId>
|
||||||
@@ -128,5 +128,18 @@
|
|||||||
<artifactId>guava</artifactId>
|
<artifactId>guava</artifactId>
|
||||||
<version>29.0-jre</version>
|
<version>29.0-jre</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.directory.studio</groupId>
|
||||||
|
<artifactId>org.apache.commons.codec</artifactId>
|
||||||
|
<version>1.8</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-extra</artifactId>
|
||||||
|
<version>5.8.27</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@@ -0,0 +1,46 @@
|
|||||||
|
package com.schisandra.auth.common.redis;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
|
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
||||||
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||||||
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
||||||
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redis的config处理
|
||||||
|
*
|
||||||
|
* @author: landaiqing
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class RedisConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||||
|
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
|
||||||
|
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
|
||||||
|
redisTemplate.setConnectionFactory(redisConnectionFactory);
|
||||||
|
redisTemplate.setKeySerializer(redisSerializer);
|
||||||
|
redisTemplate.setHashKeySerializer(redisSerializer);
|
||||||
|
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
|
||||||
|
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer());
|
||||||
|
return redisTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
|
||||||
|
Jackson2JsonRedisSerializer<Object> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
||||||
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
|
||||||
|
jsonRedisSerializer.setObjectMapper(objectMapper);
|
||||||
|
return jsonRedisSerializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,107 @@
|
|||||||
|
package com.schisandra.auth.common.redis;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RedisUtil工具类
|
||||||
|
*
|
||||||
|
* @author: landaiqing
|
||||||
|
* @date: 2024/2/19
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class RedisUtil {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisTemplate redisTemplate;
|
||||||
|
|
||||||
|
private static final String CACHE_KEY_SEPARATOR = ".";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建缓存key
|
||||||
|
*/
|
||||||
|
public String buildKey(String... strObjs) {
|
||||||
|
return Stream.of(strObjs).collect(Collectors.joining(CACHE_KEY_SEPARATOR));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否存在key
|
||||||
|
*/
|
||||||
|
public boolean exist(String key) {
|
||||||
|
return redisTemplate.hasKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除key
|
||||||
|
*/
|
||||||
|
public boolean del(String key) {
|
||||||
|
return redisTemplate.delete(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set(不带过期)
|
||||||
|
*/
|
||||||
|
public void set(String key, String value) {
|
||||||
|
redisTemplate.opsForValue().set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set(带过期)
|
||||||
|
*/
|
||||||
|
public boolean setNx(String key, String value, Long time, TimeUnit timeUnit) {
|
||||||
|
return redisTemplate.opsForValue().setIfAbsent(key, value, time, timeUnit);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取string类型缓存
|
||||||
|
*/
|
||||||
|
public String get(String key) {
|
||||||
|
return (String) redisTemplate.opsForValue().get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean zAdd(String key, String value, Long score) {
|
||||||
|
return redisTemplate.opsForZSet().add(key, value, Double.valueOf(String.valueOf(score)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long countZset(String key) {
|
||||||
|
return redisTemplate.opsForZSet().size(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> rangeZset(String key, long start, long end) {
|
||||||
|
return redisTemplate.opsForZSet().range(key, start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long removeZset(String key, Object value) {
|
||||||
|
return redisTemplate.opsForZSet().remove(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeZsetList(String key, Set<String> value) {
|
||||||
|
value.stream().forEach((val) -> redisTemplate.opsForZSet().remove(key, val));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double score(String key, Object value) {
|
||||||
|
return redisTemplate.opsForZSet().score(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> rangeByScore(String key, long start, long end) {
|
||||||
|
return redisTemplate.opsForZSet().rangeByScore(key, Double.valueOf(String.valueOf(start)), Double.valueOf(String.valueOf(end)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object addScore(String key, Object obj, double score) {
|
||||||
|
return redisTemplate.opsForZSet().incrementScore(key, obj, score);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object rank(String key, Object obj) {
|
||||||
|
return redisTemplate.opsForZSet().rank(key, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,110 @@
|
|||||||
|
package com.schisandra.auth.common.utils;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.SecureRandom;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName AESUtils 一定要选择16位密钥长度,也就是KEY_LENGTH=16*8,36的话就需要修改环境的jar包。
|
||||||
|
* @Description TODO
|
||||||
|
* @Author L
|
||||||
|
* @Date 2024/1/26 17:27
|
||||||
|
*/
|
||||||
|
public class AESUtils {
|
||||||
|
/**
|
||||||
|
* 加密算法AES
|
||||||
|
*/
|
||||||
|
private static final String KEY_ALGORITHM = "AES";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key的长度,Wrong key size: must be equal to 128, 192 or 256
|
||||||
|
* 传入时需要16、24、36
|
||||||
|
*/
|
||||||
|
private static final int KEY_LENGTH = 16 * 8;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 算法名称/加密模式/数据填充方式
|
||||||
|
* 默认:AES/ECB/PKCS5Padding
|
||||||
|
*/
|
||||||
|
private static final String ALGORITHMS = "AES/ECB/PKCS5Padding";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后端AES的key,由静态代码块赋值
|
||||||
|
*/
|
||||||
|
public static String key;
|
||||||
|
|
||||||
|
|
||||||
|
static {
|
||||||
|
key = getKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取key
|
||||||
|
*/
|
||||||
|
public static String getKey() {
|
||||||
|
int length = KEY_LENGTH / 8;
|
||||||
|
StringBuilder uid = new StringBuilder(length);
|
||||||
|
//产生32位的强随机数
|
||||||
|
Random rd = new SecureRandom();
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
//产生0-2的3位随机数
|
||||||
|
switch (rd.nextInt(3)) {
|
||||||
|
case 0:
|
||||||
|
//0-9的随机数
|
||||||
|
uid.append(rd.nextInt(10));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
//ASCII在65-90之间为大写,获取大写随机
|
||||||
|
uid.append((char) (rd.nextInt(26) + 65));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
//ASCII在97-122之间为小写,获取小写随机
|
||||||
|
uid.append((char) (rd.nextInt(26) + 97));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return uid.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AES 加密
|
||||||
|
*
|
||||||
|
* @param content 加密的字符串
|
||||||
|
* @param encryptKey key值
|
||||||
|
*/
|
||||||
|
public static String encrypt(String content, String encryptKey) throws Exception {
|
||||||
|
//设置Cipher对象
|
||||||
|
Cipher cipher = Cipher.getInstance(ALGORITHMS);
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), KEY_ALGORITHM));
|
||||||
|
|
||||||
|
//调用doFinal
|
||||||
|
// 转base64
|
||||||
|
return Base64.encodeBase64String(cipher.doFinal(content.getBytes(StandardCharsets.UTF_8)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AES 解密
|
||||||
|
*
|
||||||
|
* @param encryptStr 解密的字符串
|
||||||
|
* @param decryptKey 解密的key值
|
||||||
|
*/
|
||||||
|
public static String decrypt(String encryptStr, String decryptKey) throws Exception {
|
||||||
|
//base64格式的key字符串转byte
|
||||||
|
byte[] decodeBase64 = Base64.decodeBase64(encryptStr);
|
||||||
|
|
||||||
|
|
||||||
|
//设置Cipher对象
|
||||||
|
Cipher cipher = Cipher.getInstance(ALGORITHMS);
|
||||||
|
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), KEY_ALGORITHM));
|
||||||
|
//调用doFinal解密
|
||||||
|
return new String(cipher.doFinal(decodeBase64));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,61 @@
|
|||||||
|
package com.schisandra.auth.common.utils;
|
||||||
|
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
|
||||||
|
public class MD5Util {
|
||||||
|
//十六进制下数字到字符的映射数组
|
||||||
|
private final static String[] hexDigits = {"0", "1", "2", "3", "4",
|
||||||
|
"5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 把inputString加密
|
||||||
|
*/
|
||||||
|
public static String md5(String inputString) {
|
||||||
|
return encodeByMD5(inputString);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 对字符串进行MD5加密
|
||||||
|
*/
|
||||||
|
private static String encodeByMD5(String originString) {
|
||||||
|
if (originString != null) {
|
||||||
|
try {
|
||||||
|
//创建具有指定算法名称的信息摘要
|
||||||
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||||
|
//使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
|
||||||
|
byte[] results = md.digest(originString.getBytes("utf-8"));
|
||||||
|
//将得到的字节数组变成字符串返回
|
||||||
|
String resultString = byteArrayToHexString(results);
|
||||||
|
return resultString.toUpperCase();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 转换字节数组为十六进制字符串
|
||||||
|
*
|
||||||
|
* @param
|
||||||
|
* @return 十六进制字符串
|
||||||
|
*/
|
||||||
|
private static String byteArrayToHexString(byte[] b) {
|
||||||
|
StringBuffer resultSb = new StringBuffer();
|
||||||
|
for (int i = 0; i < b.length; i++) {
|
||||||
|
resultSb.append(byteToHexString(b[i]));
|
||||||
|
}
|
||||||
|
return resultSb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String byteToHexString(byte b) {
|
||||||
|
int n = b;
|
||||||
|
if (n < 0) {
|
||||||
|
n += 256;
|
||||||
|
}
|
||||||
|
int d1 = n / 16;
|
||||||
|
int d2 = n % 16;
|
||||||
|
return hexDigits[d1] + hexDigits[d2];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,171 @@
|
|||||||
|
package com.schisandra.auth.common.utils;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.security.Key;
|
||||||
|
import java.security.KeyFactory;
|
||||||
|
import java.security.KeyPair;
|
||||||
|
import java.security.KeyPairGenerator;
|
||||||
|
import java.security.interfaces.RSAPrivateKey;
|
||||||
|
import java.security.interfaces.RSAPublicKey;
|
||||||
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName RSAUtils
|
||||||
|
* @Description TODO
|
||||||
|
* @Author L
|
||||||
|
* @Date 2024/1/26 17:28
|
||||||
|
*/
|
||||||
|
public class RSAUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加密算法RSA
|
||||||
|
*/
|
||||||
|
private static final String KEY_ALGORITHM = "RSA";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 算法名称/加密模式/数据填充方式
|
||||||
|
* 默认:RSA/ECB/PKCS1Padding
|
||||||
|
*/
|
||||||
|
private static final String ALGORITHMS = "RSA/ECB/PKCS1Padding";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA最大加密明文大小
|
||||||
|
*/
|
||||||
|
private static final int MAX_ENCRYPT_BLOCK = 245;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA最大解密密文大小
|
||||||
|
*/
|
||||||
|
private static final int MAX_DECRYPT_BLOCK = 256;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA 位数 如果采用2048 上面最大加密和最大解密则须填写: 245 256
|
||||||
|
*/
|
||||||
|
private static final int INITIALIZE_LENGTH = 2048;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后端RSA的密钥对(公钥和私钥)Map,由静态代码块赋值
|
||||||
|
*/
|
||||||
|
private static final Map<String, String> map = new LinkedHashMap<>(2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成密钥对(公钥和私钥)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static Map<String,String> genKeyPair() throws Exception {
|
||||||
|
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
|
||||||
|
keyPairGen.initialize(INITIALIZE_LENGTH);
|
||||||
|
KeyPair keyPair = keyPairGen.generateKeyPair();
|
||||||
|
// 获取公钥
|
||||||
|
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
|
||||||
|
// 获取私钥
|
||||||
|
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
|
||||||
|
// 得到公钥字符串
|
||||||
|
String publicKeyString = Base64.encodeBase64String(publicKey.getEncoded());
|
||||||
|
// 得到私钥字符串
|
||||||
|
String privateKeyString = Base64.encodeBase64String((privateKey.getEncoded()));
|
||||||
|
map.put("publicKey",publicKeyString);
|
||||||
|
map.put("privateKey",privateKeyString);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
public static String getPrivateKey(){
|
||||||
|
return map.get("privateKey");
|
||||||
|
}
|
||||||
|
public static String getPublicKey(){
|
||||||
|
return map.get("publicKey");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* RSA私钥解密
|
||||||
|
* @param data BASE64编码过的密文
|
||||||
|
* @param privateKey 私钥(BASE64编码)
|
||||||
|
* @return utf-8编码的明文
|
||||||
|
*/
|
||||||
|
public static byte[] decryptByPrivateKey(byte[] data, String privateKey) throws Exception {
|
||||||
|
//base64格式的key字符串转Key对象
|
||||||
|
Key privateK = KeyFactory.getInstance(KEY_ALGORITHM).generatePrivate(new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey)));
|
||||||
|
Cipher cipher = Cipher.getInstance(ALGORITHMS);
|
||||||
|
cipher.init(Cipher.DECRYPT_MODE, privateK);
|
||||||
|
|
||||||
|
//分段进行解密操作
|
||||||
|
return encryptAndDecryptOfSubsection(data, cipher, MAX_DECRYPT_BLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA公钥加密
|
||||||
|
* @param data BASE64编码过的密文
|
||||||
|
* @param publicKey 公钥(BASE64编码)
|
||||||
|
* @return utf-8编码的明文
|
||||||
|
*/
|
||||||
|
public static byte[] encryptByPublicKey(byte[] data, String publicKey) throws Exception {
|
||||||
|
//base64格式的key字符串转Key对象
|
||||||
|
Key publicK = KeyFactory.getInstance(KEY_ALGORITHM).generatePublic(new X509EncodedKeySpec(Base64.decodeBase64(publicKey)));
|
||||||
|
Cipher cipher = Cipher.getInstance(ALGORITHMS);
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, publicK);
|
||||||
|
//分段进行加密操作
|
||||||
|
return encryptAndDecryptOfSubsection(data, cipher, MAX_ENCRYPT_BLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA公钥解密
|
||||||
|
* @param data BASE64编码过的密文
|
||||||
|
* @param publicKey RSA公钥
|
||||||
|
* @return utf-8编码的明文
|
||||||
|
*/
|
||||||
|
public static byte[] pubKeyDec(byte[] data, String publicKey) throws Exception {
|
||||||
|
//base64格式的key字符串转Key对象
|
||||||
|
Key privateK = KeyFactory.getInstance(KEY_ALGORITHM).generatePublic(new X509EncodedKeySpec(Base64.decodeBase64(publicKey)));
|
||||||
|
Cipher cipher = Cipher.getInstance(ALGORITHMS);
|
||||||
|
cipher.init(Cipher.DECRYPT_MODE, privateK);
|
||||||
|
|
||||||
|
//分段进行解密操作
|
||||||
|
return encryptAndDecryptOfSubsection(data, cipher, MAX_DECRYPT_BLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA私钥加密
|
||||||
|
* @param data 待加密的明文
|
||||||
|
* @param privateKey RSA私钥
|
||||||
|
* @return 经BASE64编码后的密文
|
||||||
|
*/
|
||||||
|
public static byte[] privKeyEnc(byte[] data, String privateKey) throws Exception {
|
||||||
|
|
||||||
|
//base64格式的key字符串转Key对象
|
||||||
|
Key publicK = KeyFactory.getInstance(KEY_ALGORITHM).generatePrivate(new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey)));
|
||||||
|
Cipher cipher = Cipher.getInstance(ALGORITHMS);
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, publicK);
|
||||||
|
|
||||||
|
//分段进行加密操作
|
||||||
|
return encryptAndDecryptOfSubsection(data, cipher, MAX_ENCRYPT_BLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分段进行加密、解密操作
|
||||||
|
*/
|
||||||
|
private static byte[] encryptAndDecryptOfSubsection(byte[] data, Cipher cipher, int encryptBlock) throws Exception {
|
||||||
|
int inputLen = data.length;
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
int offSet = 0;
|
||||||
|
byte[] cache;
|
||||||
|
int i = 0;
|
||||||
|
// 对数据分段加密
|
||||||
|
while (inputLen - offSet > 0) {
|
||||||
|
if (inputLen - offSet > encryptBlock) {
|
||||||
|
cache = cipher.doFinal(data, offSet, encryptBlock);
|
||||||
|
} else {
|
||||||
|
cache = cipher.doFinal(data, offSet, inputLen - offSet);
|
||||||
|
}
|
||||||
|
out.write(cache, 0, cache.length);
|
||||||
|
i++;
|
||||||
|
offSet = i * encryptBlock;
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
return out.toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,32 @@
|
|||||||
|
package com.schisandra.auth.common.utils;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class SmsCodeUtils {
|
||||||
|
public static Integer generateValidateCode(int length){
|
||||||
|
Integer code =null;
|
||||||
|
|
||||||
|
//长度为4
|
||||||
|
if(length == 4){
|
||||||
|
//生成随机数,最大为9999
|
||||||
|
code = new Random().nextInt(9999);
|
||||||
|
if(code < 1000){
|
||||||
|
//保证随机数为4位数字
|
||||||
|
code = code + 1000;
|
||||||
|
}
|
||||||
|
//长度为6
|
||||||
|
}else if(length == 6){
|
||||||
|
//生成随机数,最大为999999
|
||||||
|
code = new Random().nextInt(999999);
|
||||||
|
if(code < 100000){
|
||||||
|
//保证随机数为6位数字
|
||||||
|
code = code + 100000;
|
||||||
|
}
|
||||||
|
//其他情况
|
||||||
|
}else{
|
||||||
|
throw new RuntimeException("只能生成4位或6位数字验证码");
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -13,6 +13,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.13.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.8</source>
|
<source>1.8</source>
|
||||||
<target>1.8</target>
|
<target>1.8</target>
|
||||||
@@ -21,7 +22,7 @@
|
|||||||
<path>
|
<path>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.18.20</version>
|
<version>1.18.24</version>
|
||||||
</path>
|
</path>
|
||||||
<!-- 必须要加, 否则生成不了 MapperImpl 实现类 -->
|
<!-- 必须要加, 否则生成不了 MapperImpl 实现类 -->
|
||||||
<path>
|
<path>
|
||||||
|
@@ -13,7 +13,8 @@ import java.util.Date;
|
|||||||
* @since 2024-04-15 19:04:11
|
* @since 2024-04-15 19:04:11
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class SchisandraAuthPermissionBO implements Serializable {
|
public class
|
||||||
|
SchisandraAuthPermissionBO implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
private Long id;
|
private Long id;
|
||||||
|
@@ -0,0 +1,155 @@
|
|||||||
|
package com.schisandra.auth.domain.bo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (SchisandraSmsConfig)实体类
|
||||||
|
*
|
||||||
|
* @author makejava
|
||||||
|
* @since 2024-05-08 20:09:54
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class SchisandraSmsConfigBO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
private Integer id;
|
||||||
|
/**
|
||||||
|
* 配置id
|
||||||
|
*/
|
||||||
|
private String configId;
|
||||||
|
/**
|
||||||
|
* 请求地址
|
||||||
|
*/
|
||||||
|
private String requestUrl;
|
||||||
|
/**
|
||||||
|
* 模板变量名称
|
||||||
|
*/
|
||||||
|
private String templateName;
|
||||||
|
/**
|
||||||
|
* 接口名称
|
||||||
|
*/
|
||||||
|
private String action;
|
||||||
|
/**
|
||||||
|
* 地域信息
|
||||||
|
*/
|
||||||
|
private String region;
|
||||||
|
|
||||||
|
private String accessKeyId;
|
||||||
|
|
||||||
|
private String accessKeySecret;
|
||||||
|
/**
|
||||||
|
* 厂商名称标识
|
||||||
|
*/
|
||||||
|
private String supplier;
|
||||||
|
/**
|
||||||
|
* 短信签名
|
||||||
|
*/
|
||||||
|
private String signature;
|
||||||
|
|
||||||
|
private String sdkAppId;
|
||||||
|
/**
|
||||||
|
* 模板ID
|
||||||
|
*/
|
||||||
|
private String templateId;
|
||||||
|
/**
|
||||||
|
* 权重
|
||||||
|
*/
|
||||||
|
private Integer weight;
|
||||||
|
/**
|
||||||
|
* 短信重试次数,默认0次不重试
|
||||||
|
*/
|
||||||
|
private Integer retryInterval;
|
||||||
|
/**
|
||||||
|
* 短信重试次数,默认0次不重试
|
||||||
|
*/
|
||||||
|
private Integer maxRetries;
|
||||||
|
/**
|
||||||
|
* 厂商的发送数量上限,默认不设置上限
|
||||||
|
*/
|
||||||
|
private Long maximum;
|
||||||
|
/**
|
||||||
|
* REST API Base URL
|
||||||
|
*/
|
||||||
|
private String baseUrl;
|
||||||
|
/**
|
||||||
|
* 请求域名
|
||||||
|
*/
|
||||||
|
private String serverIp;
|
||||||
|
/**
|
||||||
|
* 请求端口
|
||||||
|
*/
|
||||||
|
private Integer serverPort;
|
||||||
|
/**
|
||||||
|
* 国内短信签名通道号
|
||||||
|
*/
|
||||||
|
private String sender;
|
||||||
|
/**
|
||||||
|
* 短信状态报告接收地
|
||||||
|
*/
|
||||||
|
private String statusCallBack;
|
||||||
|
/**
|
||||||
|
* APP接入地址
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
/**
|
||||||
|
* 模板短信请求地址
|
||||||
|
*/
|
||||||
|
private String templateUrl;
|
||||||
|
/**
|
||||||
|
* 验证码短信请求地址
|
||||||
|
*/
|
||||||
|
private String codeUrl;
|
||||||
|
/**
|
||||||
|
* 验证码验证请求地址
|
||||||
|
*/
|
||||||
|
private String verifyUrl;
|
||||||
|
/**
|
||||||
|
* 是否需要支持短信上行。true:需要,false:不需要false
|
||||||
|
*/
|
||||||
|
private String needUp;
|
||||||
|
/**
|
||||||
|
* 请求超时时间
|
||||||
|
*/
|
||||||
|
private Integer connTimeout;
|
||||||
|
/**
|
||||||
|
* 是否为简易模式
|
||||||
|
*/
|
||||||
|
private String isSimple;
|
||||||
|
/**
|
||||||
|
* 短信发送后将向这个地址推送(运营商返回的)发送报告
|
||||||
|
*/
|
||||||
|
private String callbackUrl;
|
||||||
|
/**
|
||||||
|
* 企业ID
|
||||||
|
*/
|
||||||
|
private Integer mchId;
|
||||||
|
|
||||||
|
private String appKey;
|
||||||
|
|
||||||
|
private Integer appId;
|
||||||
|
/**
|
||||||
|
* 版本号
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
/**
|
||||||
|
* 单发链接
|
||||||
|
*/
|
||||||
|
private String singleMsgUrl;
|
||||||
|
/**
|
||||||
|
* 群发链接
|
||||||
|
*/
|
||||||
|
private String massMsgUrl;
|
||||||
|
/**
|
||||||
|
* 签名ID
|
||||||
|
*/
|
||||||
|
private String signatureId;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,48 @@
|
|||||||
|
package com.schisandra.auth.domain.convert;
|
||||||
|
|
||||||
|
import com.schisandra.auth.domain.bo.SchisandraAuthUserBO;
|
||||||
|
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraAuthUser;
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (SchisandraSmsConfig)实体类
|
||||||
|
*
|
||||||
|
* @author makejava
|
||||||
|
* @since 2024-05-08 20:09:54
|
||||||
|
*/
|
||||||
|
@Mapper(componentModel = "spring")
|
||||||
|
public interface SchisandraSmsConfigBOConvert {
|
||||||
|
|
||||||
|
SchisandraSmsConfigBOConvert INSTANCE = Mappers.getMapper(SchisandraSmsConfigBOConvert.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 将bo转换为实体
|
||||||
|
* @param schisandraSmsConfigBO
|
||||||
|
* @return com.schisandra.auth.infra.basic.entity.SchisandraAuthUser
|
||||||
|
* @author landaiqing
|
||||||
|
* @date 2024/3/21 23:13
|
||||||
|
*/
|
||||||
|
SchisandraSmsConfig convertBOToEntity(SchisandraSmsConfigBO schisandraSmsConfigBO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 将实体转换为bo
|
||||||
|
* @param schisandraSmsConfig
|
||||||
|
* @return com.schisandra.auth.domain.bo.SchisandraAuthUserBO
|
||||||
|
* @author landaiqing
|
||||||
|
* @date 2024/3/21 23:13
|
||||||
|
*/
|
||||||
|
SchisandraSmsConfigBO convertEntityToBO(SchisandraSmsConfig schisandraSmsConfig);
|
||||||
|
|
||||||
|
List<SchisandraSmsConfigBO> convertEntityToBOList(List<SchisandraSmsConfig> schisandraSmsConfigs);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -8,6 +8,6 @@ public interface SchisandraAuthPermissionDomainService {
|
|||||||
Object update(SchisandraAuthPermissionBO schisandraAuthPermissionBO);
|
Object update(SchisandraAuthPermissionBO schisandraAuthPermissionBO);
|
||||||
Object delete(SchisandraAuthPermissionBO schisandraAuthPermissionBO);
|
Object delete(SchisandraAuthPermissionBO schisandraAuthPermissionBO);
|
||||||
Object insert(SchisandraAuthPermissionBO schisandraAuthPermissionBO);
|
Object insert(SchisandraAuthPermissionBO schisandraAuthPermissionBO);
|
||||||
SchisandraAuthPermission select(SchisandraAuthPermissionBO schisandraAuthPermissionBO);
|
SchisandraAuthPermissionBO select(SchisandraAuthPermissionBO schisandraAuthPermissionBO);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -27,7 +27,7 @@ public interface SchisandraAuthUserDomainService {
|
|||||||
* @author msz
|
* @author msz
|
||||||
* @return com.schisandra.auth.infra.basic.entity.SchisandraAuthUser
|
* @return com.schisandra.auth.infra.basic.entity.SchisandraAuthUser
|
||||||
*/
|
*/
|
||||||
SchisandraAuthUser queryById(SchisandraAuthUserBO schisandraAuthUserBO);
|
SchisandraAuthUserBO queryById(SchisandraAuthUserBO schisandraAuthUserBO);
|
||||||
/**
|
/**
|
||||||
* @description 添加用户信息
|
* @description 添加用户信息
|
||||||
* @param schisandraAuthUserBO
|
* @param schisandraAuthUserBO
|
||||||
|
@@ -0,0 +1,22 @@
|
|||||||
|
package com.schisandra.auth.domain.service;
|
||||||
|
|
||||||
|
|
||||||
|
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户领域service
|
||||||
|
*
|
||||||
|
* @author landaiqing
|
||||||
|
* @date 2024/3/21
|
||||||
|
*/
|
||||||
|
public interface SchisandraSmsConfigDomainService {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
List<SchisandraSmsConfigBO> queryAll();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -62,11 +62,12 @@ public class SchisandraAuthPermissionDomainServiceImpl implements SchisandraAuth
|
|||||||
* @date: 2024/4/17 17:07
|
* @date: 2024/4/17 17:07
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public SchisandraAuthPermission select(SchisandraAuthPermissionBO schisandraAuthPermissionBO) {
|
public SchisandraAuthPermissionBO select(SchisandraAuthPermissionBO schisandraAuthPermissionBO) {
|
||||||
|
|
||||||
SchisandraAuthPermission schisandraAuthPermission = SchisandraAuthPermissionBOConverter.INSTANCE.convertBOToEntity(schisandraAuthPermissionBO);
|
SchisandraAuthPermission schisandraAuthPermission = SchisandraAuthPermissionBOConverter.INSTANCE.convertBOToEntity(schisandraAuthPermissionBO);
|
||||||
|
|
||||||
SchisandraAuthPermission schisandraAuthPermission1 =schisandraAuthPermissionService.queryById(schisandraAuthPermission.getId());
|
SchisandraAuthPermission schisandraAuthPermission1 =schisandraAuthPermissionService.queryById(schisandraAuthPermission.getId());
|
||||||
return schisandraAuthPermission1;
|
SchisandraAuthPermissionBO schisandraAuthPermissionBO1 = SchisandraAuthPermissionBOConverter.INSTANCE.convertEntityToBO(schisandraAuthPermission1);
|
||||||
|
return schisandraAuthPermissionBO1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -38,9 +38,10 @@ public class SchisandraAuthUserDomainServiceImpl implements SchisandraAuthUserDo
|
|||||||
* @date 2024/4/3 22:10
|
* @date 2024/4/3 22:10
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public SchisandraAuthUser queryById(SchisandraAuthUserBO schisandraAuthUserBO) {
|
public SchisandraAuthUserBO queryById(SchisandraAuthUserBO schisandraAuthUserBO) {
|
||||||
SchisandraAuthUser schisandraAuthUser = schisandraAuthUserService.queryById(schisandraAuthUserBO.getId());
|
SchisandraAuthUser schisandraAuthUser = schisandraAuthUserService.queryById(schisandraAuthUserBO.getId());
|
||||||
return schisandraAuthUser;
|
SchisandraAuthUserBO schisandraAuthUserBO1 = SchisandraAuthUserBOConverter.INSTANCE.convertEntityToBO(schisandraAuthUser);
|
||||||
|
return schisandraAuthUserBO1;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @description 添加用户信息
|
* @description 添加用户信息
|
||||||
|
@@ -0,0 +1,26 @@
|
|||||||
|
package com.schisandra.auth.domain.service.impl;
|
||||||
|
|
||||||
|
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||||
|
import com.schisandra.auth.domain.convert.SchisandraSmsConfigBOConvert;
|
||||||
|
import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService;
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
import com.schisandra.auth.infra.basic.service.SchisandraSmsConfigService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class SchisandraSmsConfigDomainServiceImpl implements SchisandraSmsConfigDomainService {
|
||||||
|
@Resource
|
||||||
|
private SchisandraSmsConfigService schisandraSmsConfigService;
|
||||||
|
@Override
|
||||||
|
public List<SchisandraSmsConfigBO> queryAll() {
|
||||||
|
|
||||||
|
List<SchisandraSmsConfig> schisandraSmsConfigs = schisandraSmsConfigService.queryAll();
|
||||||
|
return SchisandraSmsConfigBOConvert.INSTANCE.convertEntityToBOList(schisandraSmsConfigs);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,86 @@
|
|||||||
|
package com.schisandra.auth.infra.basic.dao;
|
||||||
|
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (SchisandraSmsConfig)表数据库访问层
|
||||||
|
*
|
||||||
|
* @author makejava
|
||||||
|
* @since 2024-05-08 20:09:54
|
||||||
|
*/
|
||||||
|
public interface SchisandraSmsConfigDao {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过ID查询单条数据
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return 实例对象
|
||||||
|
*/
|
||||||
|
SchisandraSmsConfig queryById(Integer id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询指定行数据
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 查询条件
|
||||||
|
* @param pageable 分页对象
|
||||||
|
* @return 对象列表
|
||||||
|
*/
|
||||||
|
List<SchisandraSmsConfig> queryAllByLimit(SchisandraSmsConfig schisandraSmsConfig, @Param("pageable") Pageable pageable);
|
||||||
|
|
||||||
|
List<SchisandraSmsConfig> queryAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计总行数
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 查询条件
|
||||||
|
* @return 总行数
|
||||||
|
*/
|
||||||
|
long count(SchisandraSmsConfig schisandraSmsConfig);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增数据
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 实例对象
|
||||||
|
* @return 影响行数
|
||||||
|
*/
|
||||||
|
int insert(SchisandraSmsConfig schisandraSmsConfig);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量新增数据(MyBatis原生foreach方法)
|
||||||
|
*
|
||||||
|
* @param entities List<SchisandraSmsConfig> 实例对象列表
|
||||||
|
* @return 影响行数
|
||||||
|
*/
|
||||||
|
int insertBatch(@Param("entities") List<SchisandraSmsConfig> entities);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量新增或按主键更新数据(MyBatis原生foreach方法)
|
||||||
|
*
|
||||||
|
* @param entities List<SchisandraSmsConfig> 实例对象列表
|
||||||
|
* @return 影响行数
|
||||||
|
* @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
|
||||||
|
*/
|
||||||
|
int insertOrUpdateBatch(@Param("entities") List<SchisandraSmsConfig> entities);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改数据
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 实例对象
|
||||||
|
* @return 影响行数
|
||||||
|
*/
|
||||||
|
int update(SchisandraSmsConfig schisandraSmsConfig);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过主键删除数据
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return 影响行数
|
||||||
|
*/
|
||||||
|
int deleteById(Integer id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,174 @@
|
|||||||
|
package com.schisandra.auth.infra.basic.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (SchisandraSmsConfig)实体类
|
||||||
|
*
|
||||||
|
* @author makejava
|
||||||
|
* @since 2024-05-08 20:09:54
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class SchisandraSmsConfig implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* id
|
||||||
|
*/
|
||||||
|
private Integer id;
|
||||||
|
/**
|
||||||
|
* 配置id
|
||||||
|
*/
|
||||||
|
private String configId;
|
||||||
|
/**
|
||||||
|
* 请求地址
|
||||||
|
*/
|
||||||
|
private String requestUrl;
|
||||||
|
/**
|
||||||
|
* 模板变量名称
|
||||||
|
*/
|
||||||
|
private String templateName;
|
||||||
|
/**
|
||||||
|
* 接口名称
|
||||||
|
*/
|
||||||
|
private String action;
|
||||||
|
/**
|
||||||
|
* 地域信息
|
||||||
|
*/
|
||||||
|
private String region;
|
||||||
|
|
||||||
|
private String accessKeyId;
|
||||||
|
|
||||||
|
private String accessKeySecret;
|
||||||
|
/**
|
||||||
|
* 厂商名称标识
|
||||||
|
*/
|
||||||
|
private String supplier;
|
||||||
|
/**
|
||||||
|
* 短信签名
|
||||||
|
*/
|
||||||
|
private String signature;
|
||||||
|
|
||||||
|
private String sdkAppId;
|
||||||
|
/**
|
||||||
|
* 模板ID
|
||||||
|
*/
|
||||||
|
private String templateId;
|
||||||
|
/**
|
||||||
|
* 权重
|
||||||
|
*/
|
||||||
|
private Integer weight;
|
||||||
|
/**
|
||||||
|
* 短信重试次数,默认0次不重试
|
||||||
|
*/
|
||||||
|
private Integer retryInterval;
|
||||||
|
/**
|
||||||
|
* 短信重试次数,默认0次不重试
|
||||||
|
*/
|
||||||
|
private Integer maxRetries;
|
||||||
|
/**
|
||||||
|
* 厂商的发送数量上限,默认不设置上限
|
||||||
|
*/
|
||||||
|
private Long maximum;
|
||||||
|
/**
|
||||||
|
* REST API Base URL
|
||||||
|
*/
|
||||||
|
private String baseUrl;
|
||||||
|
/**
|
||||||
|
* 请求域名
|
||||||
|
*/
|
||||||
|
private String serverIp;
|
||||||
|
/**
|
||||||
|
* 请求端口
|
||||||
|
*/
|
||||||
|
private Integer serverPort;
|
||||||
|
/**
|
||||||
|
* 国内短信签名通道号
|
||||||
|
*/
|
||||||
|
private String sender;
|
||||||
|
/**
|
||||||
|
* 短信状态报告接收地
|
||||||
|
*/
|
||||||
|
private String statusCallBack;
|
||||||
|
/**
|
||||||
|
* APP接入地址
|
||||||
|
*/
|
||||||
|
private String url;
|
||||||
|
/**
|
||||||
|
* 模板短信请求地址
|
||||||
|
*/
|
||||||
|
private String templateUrl;
|
||||||
|
/**
|
||||||
|
* 验证码短信请求地址
|
||||||
|
*/
|
||||||
|
private String codeUrl;
|
||||||
|
/**
|
||||||
|
* 验证码验证请求地址
|
||||||
|
*/
|
||||||
|
private String verifyUrl;
|
||||||
|
/**
|
||||||
|
* 是否需要支持短信上行。true:需要,false:不需要false
|
||||||
|
*/
|
||||||
|
private String needUp;
|
||||||
|
/**
|
||||||
|
* 请求超时时间
|
||||||
|
*/
|
||||||
|
private Integer connTimeout;
|
||||||
|
/**
|
||||||
|
* 是否为简易模式
|
||||||
|
*/
|
||||||
|
private String isSimple;
|
||||||
|
/**
|
||||||
|
* 短信发送后将向这个地址推送(运营商返回的)发送报告
|
||||||
|
*/
|
||||||
|
private String callbackUrl;
|
||||||
|
/**
|
||||||
|
* 企业ID
|
||||||
|
*/
|
||||||
|
private Integer mchId;
|
||||||
|
|
||||||
|
private String appKey;
|
||||||
|
|
||||||
|
private Integer appId;
|
||||||
|
/**
|
||||||
|
* 版本号
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
/**
|
||||||
|
* 单发链接
|
||||||
|
*/
|
||||||
|
private String singleMsgUrl;
|
||||||
|
/**
|
||||||
|
* 群发链接
|
||||||
|
*/
|
||||||
|
private String massMsgUrl;
|
||||||
|
/**
|
||||||
|
* 签名ID
|
||||||
|
*/
|
||||||
|
private String signatureId;
|
||||||
|
/**
|
||||||
|
* 创建人
|
||||||
|
*/
|
||||||
|
private String createdBy;
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createdTime;
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
private Date updateTime;
|
||||||
|
/**
|
||||||
|
* 更新人
|
||||||
|
*/
|
||||||
|
private String updateBy;
|
||||||
|
/**
|
||||||
|
* 是否删除 0 未删除 1已删除
|
||||||
|
*/
|
||||||
|
private Integer isDeleted;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,60 @@
|
|||||||
|
package com.schisandra.auth.infra.basic.service;
|
||||||
|
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (SchisandraSmsConfig)表服务接口
|
||||||
|
*
|
||||||
|
* @author makejava
|
||||||
|
* @since 2024-05-08 20:09:55
|
||||||
|
*/
|
||||||
|
public interface SchisandraSmsConfigService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过ID查询单条数据
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return 实例对象
|
||||||
|
*/
|
||||||
|
SchisandraSmsConfig queryById(Integer id);
|
||||||
|
|
||||||
|
List<SchisandraSmsConfig> queryAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 筛选条件
|
||||||
|
* @param pageRequest 分页对象
|
||||||
|
* @return 查询结果
|
||||||
|
*/
|
||||||
|
Page<SchisandraSmsConfig> queryByPage(SchisandraSmsConfig schisandraSmsConfig, PageRequest pageRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增数据
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 实例对象
|
||||||
|
* @return 实例对象
|
||||||
|
*/
|
||||||
|
SchisandraSmsConfig insert(SchisandraSmsConfig schisandraSmsConfig);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改数据
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 实例对象
|
||||||
|
* @return 实例对象
|
||||||
|
*/
|
||||||
|
SchisandraSmsConfig update(SchisandraSmsConfig schisandraSmsConfig);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过主键删除数据
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
boolean deleteById(Integer id);
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,88 @@
|
|||||||
|
package com.schisandra.auth.infra.basic.service.impl;
|
||||||
|
|
||||||
|
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||||
|
import com.schisandra.auth.infra.basic.dao.SchisandraSmsConfigDao;
|
||||||
|
import com.schisandra.auth.infra.basic.service.SchisandraSmsConfigService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageImpl;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (SchisandraSmsConfig)表服务实现类
|
||||||
|
*
|
||||||
|
* @author makejava
|
||||||
|
* @since 2024-05-08 20:09:55
|
||||||
|
*/
|
||||||
|
@Service("schisandraSmsConfigService")
|
||||||
|
public class SchisandraSmsConfigServiceImpl implements SchisandraSmsConfigService {
|
||||||
|
@Resource
|
||||||
|
private SchisandraSmsConfigDao schisandraSmsConfigDao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过ID查询单条数据
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return 实例对象
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public SchisandraSmsConfig queryById(Integer id) {
|
||||||
|
return this.schisandraSmsConfigDao.queryById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 筛选条件
|
||||||
|
* @param pageRequest 分页对象
|
||||||
|
* @return 查询结果
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Page<SchisandraSmsConfig> queryByPage(SchisandraSmsConfig schisandraSmsConfig, PageRequest pageRequest) {
|
||||||
|
long total = this.schisandraSmsConfigDao.count(schisandraSmsConfig);
|
||||||
|
return new PageImpl<>(this.schisandraSmsConfigDao.queryAllByLimit(schisandraSmsConfig, pageRequest), pageRequest, total);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SchisandraSmsConfig> queryAll() {
|
||||||
|
return this.schisandraSmsConfigDao.queryAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增数据
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 实例对象
|
||||||
|
* @return 实例对象
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public SchisandraSmsConfig insert(SchisandraSmsConfig schisandraSmsConfig) {
|
||||||
|
this.schisandraSmsConfigDao.insert(schisandraSmsConfig);
|
||||||
|
return schisandraSmsConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改数据
|
||||||
|
*
|
||||||
|
* @param schisandraSmsConfig 实例对象
|
||||||
|
* @return 实例对象
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public SchisandraSmsConfig update(SchisandraSmsConfig schisandraSmsConfig) {
|
||||||
|
this.schisandraSmsConfigDao.update(schisandraSmsConfig);
|
||||||
|
return this.queryById(schisandraSmsConfig.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过主键删除数据
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean deleteById(Integer id) {
|
||||||
|
return this.schisandraSmsConfigDao.deleteById(id) > 0;
|
||||||
|
}
|
||||||
|
}
|
@@ -44,7 +44,7 @@ public class DruidEncryptUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
String encrypt = encrypt("$LDQ20020618xxx$");
|
String encrypt = encrypt("");
|
||||||
System.out.println("encrypt:" + encrypt);
|
System.out.println("encrypt:" + encrypt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -0,0 +1,499 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.schisandra.auth.infra.basic.dao.SchisandraSmsConfigDao">
|
||||||
|
|
||||||
|
<resultMap type="com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig" id="SchisandraSmsConfigMap">
|
||||||
|
<result property="id" column="id" jdbcType="INTEGER"/>
|
||||||
|
<result property="configId" column="config_id" jdbcType="VARCHAR"/>
|
||||||
|
<result property="requestUrl" column="request_url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="templateName" column="template_name" jdbcType="VARCHAR"/>
|
||||||
|
<result property="action" column="action" jdbcType="VARCHAR"/>
|
||||||
|
<result property="region" column="region" jdbcType="VARCHAR"/>
|
||||||
|
<result property="accessKeyId" column="access_key_id" jdbcType="VARCHAR"/>
|
||||||
|
<result property="accessKeySecret" column="access_key_secret" jdbcType="VARCHAR"/>
|
||||||
|
<result property="supplier" column="supplier" jdbcType="VARCHAR"/>
|
||||||
|
<result property="signature" column="signature" jdbcType="VARCHAR"/>
|
||||||
|
<result property="sdkAppId" column="sdk_app_id" jdbcType="VARCHAR"/>
|
||||||
|
<result property="templateId" column="template_id" jdbcType="VARCHAR"/>
|
||||||
|
<result property="weight" column="weight" jdbcType="INTEGER"/>
|
||||||
|
<result property="retryInterval" column="retry_interval" jdbcType="INTEGER"/>
|
||||||
|
<result property="maxRetries" column="max_retries" jdbcType="INTEGER"/>
|
||||||
|
<result property="maximum" column="maximum" jdbcType="INTEGER"/>
|
||||||
|
<result property="baseUrl" column="base_url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="serverIp" column="server_ip" jdbcType="VARCHAR"/>
|
||||||
|
<result property="serverPort" column="server_port" jdbcType="INTEGER"/>
|
||||||
|
<result property="sender" column="sender" jdbcType="VARCHAR"/>
|
||||||
|
<result property="statusCallBack" column="status_call_back" jdbcType="VARCHAR"/>
|
||||||
|
<result property="url" column="url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="templateUrl" column="template_url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="codeUrl" column="code_url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="verifyUrl" column="verify_url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="needUp" column="need_up" jdbcType="VARCHAR"/>
|
||||||
|
<result property="connTimeout" column="conn_timeout" jdbcType="INTEGER"/>
|
||||||
|
<result property="isSimple" column="is_simple" jdbcType="VARCHAR"/>
|
||||||
|
<result property="callbackUrl" column="callback_url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="mchId" column="mch_id" jdbcType="INTEGER"/>
|
||||||
|
<result property="appKey" column="app_key" jdbcType="VARCHAR"/>
|
||||||
|
<result property="appId" column="app_id" jdbcType="INTEGER"/>
|
||||||
|
<result property="version" column="version" jdbcType="VARCHAR"/>
|
||||||
|
<result property="singleMsgUrl" column="single_msg_url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="massMsgUrl" column="mass_msg_url" jdbcType="VARCHAR"/>
|
||||||
|
<result property="signatureId" column="signature_Id" jdbcType="VARCHAR"/>
|
||||||
|
<result property="createdBy" column="created_by" jdbcType="VARCHAR"/>
|
||||||
|
<result property="createdTime" column="created_time" jdbcType="TIMESTAMP"/>
|
||||||
|
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
|
||||||
|
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
|
||||||
|
<result property="isDeleted" column="is_deleted" jdbcType="INTEGER"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<!--查询单个-->
|
||||||
|
<select id="queryById" resultMap="SchisandraSmsConfigMap">
|
||||||
|
select id,config_id,request_url,template_name,'action',region,access_key_id,access_key_secret,supplier,signature,sdk_app_id,template_id,weight,retry_interval,max_retries,maximum,base_url,server_ip,server_port,sender,status_call_back,url,template_url,code_url,verify_url,need_up,conn_timeout,is_simple,callback_url,mch_id,app_key,app_id,version,single_msg_url,mass_msg_url,signature_Id,created_by,created_time,update_time,update_by,is_deleted
|
||||||
|
from schisandra_sms_config
|
||||||
|
where id = #{id}
|
||||||
|
</select>
|
||||||
|
<select id="queryAll" resultMap="SchisandraSmsConfigMap">
|
||||||
|
select
|
||||||
|
id,config_id,request_url,template_name,'action',region,access_key_id,access_key_secret,supplier,signature,sdk_app_id,template_id,weight,retry_interval,max_retries,maximum,base_url,server_ip,server_port,sender,status_call_back,url,template_url,code_url,verify_url,need_up,conn_timeout,is_simple,callback_url,mch_id,app_key,app_id,version,single_msg_url,mass_msg_url,signature_Id,created_by,created_time,update_time,update_by,is_deleted
|
||||||
|
from schisandra_sms_config
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--查询指定行数据-->
|
||||||
|
<select id="queryAllByLimit" resultMap="SchisandraSmsConfigMap">
|
||||||
|
select
|
||||||
|
id,config_id,request_url,template_name,'action',region,access_key_id,access_key_secret,supplier,signature,sdk_app_id,template_id,weight,retry_interval,max_retries,maximum,base_url,server_ip,server_port,sender,status_call_back,url,template_url,code_url,verify_url,need_up,conn_timeout,is_simple,callback_url,mch_id,app_key,app_id,version,single_msg_url,mass_msg_url,signature_Id,created_by,created_time,update_time,update_by,is_deleted
|
||||||
|
from schisandra_sms_config
|
||||||
|
<where>
|
||||||
|
<if test="id != null">
|
||||||
|
and id = #{id}
|
||||||
|
</if>
|
||||||
|
<if test="configId != null and configId != ''">
|
||||||
|
and config_id = #{configId}
|
||||||
|
</if>
|
||||||
|
<if test="requestUrl != null and requestUrl != ''">
|
||||||
|
and request_url = #{requestUrl}
|
||||||
|
</if>
|
||||||
|
<if test="templateName != null and templateName != ''">
|
||||||
|
and template_name = #{templateName}
|
||||||
|
</if>
|
||||||
|
<if test="action != null and action != ''">
|
||||||
|
and 'action' = #{action}
|
||||||
|
</if>
|
||||||
|
<if test="region != null and region != ''">
|
||||||
|
and region = #{region}
|
||||||
|
</if>
|
||||||
|
<if test="accessKeyId != null and accessKeyId != ''">
|
||||||
|
and access_key_id = #{accessKeyId}
|
||||||
|
</if>
|
||||||
|
<if test="accessKeySecret != null and accessKeySecret != ''">
|
||||||
|
and access_key_secret = #{accessKeySecret}
|
||||||
|
</if>
|
||||||
|
<if test="supplier != null and supplier != ''">
|
||||||
|
and supplier = #{supplier}
|
||||||
|
</if>
|
||||||
|
<if test="signature != null and signature != ''">
|
||||||
|
and signature = #{signature}
|
||||||
|
</if>
|
||||||
|
<if test="sdkAppId != null and sdkAppId != ''">
|
||||||
|
and sdk_app_id = #{sdkAppId}
|
||||||
|
</if>
|
||||||
|
<if test="templateId != null and templateId != ''">
|
||||||
|
and template_id = #{templateId}
|
||||||
|
</if>
|
||||||
|
<if test="weight != null">
|
||||||
|
and weight = #{weight}
|
||||||
|
</if>
|
||||||
|
<if test="retryInterval != null">
|
||||||
|
and retry_interval = #{retryInterval}
|
||||||
|
</if>
|
||||||
|
<if test="maxRetries != null">
|
||||||
|
and max_retries = #{maxRetries}
|
||||||
|
</if>
|
||||||
|
<if test="maximum != null">
|
||||||
|
and maximum = #{maximum}
|
||||||
|
</if>
|
||||||
|
<if test="baseUrl != null and baseUrl != ''">
|
||||||
|
and base_url = #{baseUrl}
|
||||||
|
</if>
|
||||||
|
<if test="serverIp != null and serverIp != ''">
|
||||||
|
and server_ip = #{serverIp}
|
||||||
|
</if>
|
||||||
|
<if test="serverPort != null">
|
||||||
|
and server_port = #{serverPort}
|
||||||
|
</if>
|
||||||
|
<if test="sender != null and sender != ''">
|
||||||
|
and sender = #{sender}
|
||||||
|
</if>
|
||||||
|
<if test="statusCallBack != null and statusCallBack != ''">
|
||||||
|
and status_call_back = #{statusCallBack}
|
||||||
|
</if>
|
||||||
|
<if test="url != null and url != ''">
|
||||||
|
and url = #{url}
|
||||||
|
</if>
|
||||||
|
<if test="templateUrl != null and templateUrl != ''">
|
||||||
|
and template_url = #{templateUrl}
|
||||||
|
</if>
|
||||||
|
<if test="codeUrl != null and codeUrl != ''">
|
||||||
|
and code_url = #{codeUrl}
|
||||||
|
</if>
|
||||||
|
<if test="verifyUrl != null and verifyUrl != ''">
|
||||||
|
and verify_url = #{verifyUrl}
|
||||||
|
</if>
|
||||||
|
<if test="needUp != null and needUp != ''">
|
||||||
|
and need_up = #{needUp}
|
||||||
|
</if>
|
||||||
|
<if test="connTimeout != null">
|
||||||
|
and conn_timeout = #{connTimeout}
|
||||||
|
</if>
|
||||||
|
<if test="isSimple != null and isSimple != ''">
|
||||||
|
and is_simple = #{isSimple}
|
||||||
|
</if>
|
||||||
|
<if test="callbackUrl != null and callbackUrl != ''">
|
||||||
|
and callback_url = #{callbackUrl}
|
||||||
|
</if>
|
||||||
|
<if test="mchId != null">
|
||||||
|
and mch_id = #{mchId}
|
||||||
|
</if>
|
||||||
|
<if test="appKey != null and appKey != ''">
|
||||||
|
and app_key = #{appKey}
|
||||||
|
</if>
|
||||||
|
<if test="appId != null">
|
||||||
|
and app_id = #{appId}
|
||||||
|
</if>
|
||||||
|
<if test="version != null and version != ''">
|
||||||
|
and version = #{version}
|
||||||
|
</if>
|
||||||
|
<if test="singleMsgUrl != null and singleMsgUrl != ''">
|
||||||
|
and single_msg_url = #{singleMsgUrl}
|
||||||
|
</if>
|
||||||
|
<if test="massMsgUrl != null and massMsgUrl != ''">
|
||||||
|
and mass_msg_url = #{massMsgUrl}
|
||||||
|
</if>
|
||||||
|
<if test="signatureId != null and signatureId != ''">
|
||||||
|
and signature_Id = #{signatureId}
|
||||||
|
</if>
|
||||||
|
<if test="createdBy != null and createdBy != ''">
|
||||||
|
and created_by = #{createdBy}
|
||||||
|
</if>
|
||||||
|
<if test="createdTime != null">
|
||||||
|
and created_time = #{createdTime}
|
||||||
|
</if>
|
||||||
|
<if test="updateTime != null">
|
||||||
|
and update_time = #{updateTime}
|
||||||
|
</if>
|
||||||
|
<if test="updateBy != null and updateBy != ''">
|
||||||
|
and update_by = #{updateBy}
|
||||||
|
</if>
|
||||||
|
<if test="isDeleted != null">
|
||||||
|
and is_deleted = #{isDeleted}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
limit #{pageable.offset}, #{pageable.pageSize}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--统计总行数-->
|
||||||
|
<select id="count" resultType="java.lang.Long">
|
||||||
|
select count(1)
|
||||||
|
from schisandra_sms_config
|
||||||
|
<where>
|
||||||
|
<if test="id != null">
|
||||||
|
and id = #{id}
|
||||||
|
</if>
|
||||||
|
<if test="configId != null and configId != ''">
|
||||||
|
and config_id = #{configId}
|
||||||
|
</if>
|
||||||
|
<if test="requestUrl != null and requestUrl != ''">
|
||||||
|
and request_url = #{requestUrl}
|
||||||
|
</if>
|
||||||
|
<if test="templateName != null and templateName != ''">
|
||||||
|
and template_name = #{templateName}
|
||||||
|
</if>
|
||||||
|
<if test="action != null and action != ''">
|
||||||
|
and 'action' = #{action}
|
||||||
|
</if>
|
||||||
|
<if test="region != null and region != ''">
|
||||||
|
and region = #{region}
|
||||||
|
</if>
|
||||||
|
<if test="accessKeyId != null and accessKeyId != ''">
|
||||||
|
and access_key_id = #{accessKeyId}
|
||||||
|
</if>
|
||||||
|
<if test="accessKeySecret != null and accessKeySecret != ''">
|
||||||
|
and access_key_secret = #{accessKeySecret}
|
||||||
|
</if>
|
||||||
|
<if test="supplier != null and supplier != ''">
|
||||||
|
and supplier = #{supplier}
|
||||||
|
</if>
|
||||||
|
<if test="signature != null and signature != ''">
|
||||||
|
and signature = #{signature}
|
||||||
|
</if>
|
||||||
|
<if test="sdkAppId != null and sdkAppId != ''">
|
||||||
|
and sdk_app_id = #{sdkAppId}
|
||||||
|
</if>
|
||||||
|
<if test="templateId != null and templateId != ''">
|
||||||
|
and template_id = #{templateId}
|
||||||
|
</if>
|
||||||
|
<if test="weight != null">
|
||||||
|
and weight = #{weight}
|
||||||
|
</if>
|
||||||
|
<if test="retryInterval != null">
|
||||||
|
and retry_interval = #{retryInterval}
|
||||||
|
</if>
|
||||||
|
<if test="maxRetries != null">
|
||||||
|
and max_retries = #{maxRetries}
|
||||||
|
</if>
|
||||||
|
<if test="maximum != null">
|
||||||
|
and maximum = #{maximum}
|
||||||
|
</if>
|
||||||
|
<if test="baseUrl != null and baseUrl != ''">
|
||||||
|
and base_url = #{baseUrl}
|
||||||
|
</if>
|
||||||
|
<if test="serverIp != null and serverIp != ''">
|
||||||
|
and server_ip = #{serverIp}
|
||||||
|
</if>
|
||||||
|
<if test="serverPort != null">
|
||||||
|
and server_port = #{serverPort}
|
||||||
|
</if>
|
||||||
|
<if test="sender != null and sender != ''">
|
||||||
|
and sender = #{sender}
|
||||||
|
</if>
|
||||||
|
<if test="statusCallBack != null and statusCallBack != ''">
|
||||||
|
and status_call_back = #{statusCallBack}
|
||||||
|
</if>
|
||||||
|
<if test="url != null and url != ''">
|
||||||
|
and url = #{url}
|
||||||
|
</if>
|
||||||
|
<if test="templateUrl != null and templateUrl != ''">
|
||||||
|
and template_url = #{templateUrl}
|
||||||
|
</if>
|
||||||
|
<if test="codeUrl != null and codeUrl != ''">
|
||||||
|
and code_url = #{codeUrl}
|
||||||
|
</if>
|
||||||
|
<if test="verifyUrl != null and verifyUrl != ''">
|
||||||
|
and verify_url = #{verifyUrl}
|
||||||
|
</if>
|
||||||
|
<if test="needUp != null and needUp != ''">
|
||||||
|
and need_up = #{needUp}
|
||||||
|
</if>
|
||||||
|
<if test="connTimeout != null">
|
||||||
|
and conn_timeout = #{connTimeout}
|
||||||
|
</if>
|
||||||
|
<if test="isSimple != null and isSimple != ''">
|
||||||
|
and is_simple = #{isSimple}
|
||||||
|
</if>
|
||||||
|
<if test="callbackUrl != null and callbackUrl != ''">
|
||||||
|
and callback_url = #{callbackUrl}
|
||||||
|
</if>
|
||||||
|
<if test="mchId != null">
|
||||||
|
and mch_id = #{mchId}
|
||||||
|
</if>
|
||||||
|
<if test="appKey != null and appKey != ''">
|
||||||
|
and app_key = #{appKey}
|
||||||
|
</if>
|
||||||
|
<if test="appId != null">
|
||||||
|
and app_id = #{appId}
|
||||||
|
</if>
|
||||||
|
<if test="version != null and version != ''">
|
||||||
|
and version = #{version}
|
||||||
|
</if>
|
||||||
|
<if test="singleMsgUrl != null and singleMsgUrl != ''">
|
||||||
|
and single_msg_url = #{singleMsgUrl}
|
||||||
|
</if>
|
||||||
|
<if test="massMsgUrl != null and massMsgUrl != ''">
|
||||||
|
and mass_msg_url = #{massMsgUrl}
|
||||||
|
</if>
|
||||||
|
<if test="signatureId != null and signatureId != ''">
|
||||||
|
and signature_Id = #{signatureId}
|
||||||
|
</if>
|
||||||
|
<if test="createdBy != null and createdBy != ''">
|
||||||
|
and created_by = #{createdBy}
|
||||||
|
</if>
|
||||||
|
<if test="createdTime != null">
|
||||||
|
and created_time = #{createdTime}
|
||||||
|
</if>
|
||||||
|
<if test="updateTime != null">
|
||||||
|
and update_time = #{updateTime}
|
||||||
|
</if>
|
||||||
|
<if test="updateBy != null and updateBy != ''">
|
||||||
|
and update_by = #{updateBy}
|
||||||
|
</if>
|
||||||
|
<if test="isDeleted != null">
|
||||||
|
and is_deleted = #{isDeleted}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--新增所有列-->
|
||||||
|
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
|
||||||
|
insert into schisandra_sms_config(config_id,request_url,template_name,'action',region,access_key_id,access_key_secret,supplier,signature,sdk_app_id,template_id,weight,retry_interval,max_retries,maximum,base_url,server_ip,server_port,sender,status_call_back,url,template_url,code_url,verify_url,need_up,conn_timeout,is_simple,callback_url,mch_id,app_key,app_id,version,single_msg_url,mass_msg_url,signature_Id,created_by,created_time,update_time,update_by,is_deleted)
|
||||||
|
values (#{configId},#{requestUrl},#{templateName},#{action},#{region},#{accessKeyId},#{accessKeySecret},#{supplier},#{signature},#{sdkAppId},#{templateId},#{weight},#{retryInterval},#{maxRetries},#{maximum},#{baseUrl},#{serverIp},#{serverPort},#{sender},#{statusCallBack},#{url},#{templateUrl},#{codeUrl},#{verifyUrl},#{needUp},#{connTimeout},#{isSimple},#{callbackUrl},#{mchId},#{appKey},#{appId},#{version},#{singleMsgUrl},#{massMsgUrl},#{signatureId},#{createdBy},#{createdTime},#{updateTime},#{updateBy},#{isDeleted})
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
|
||||||
|
insert into
|
||||||
|
schisandra_sms_config(config_id,request_url,template_name,'action',region,access_key_id,access_key_secret,supplier,signature,sdk_app_id,template_id,weight,retry_interval,max_retries,maximum,base_url,server_ip,server_port,sender,status_call_back,url,template_url,code_url,verify_url,need_up,conn_timeout,is_simple,callback_url,mch_id,app_key,app_id,version,single_msg_url,mass_msg_url,signature_Id,created_by,created_time,update_time,update_by,is_deleted)
|
||||||
|
values
|
||||||
|
<foreach collection="entities" item="entity" separator=",">
|
||||||
|
(#{entity.configId},#{entity.requestUrl},#{entity.templateName},#{entity.action},#{entity.region},#{entity.accessKeyId},#{entity.accessKeySecret},#{entity.supplier},#{entity.signature},#{entity.sdkAppId},#{entity.templateId},#{entity.weight},#{entity.retryInterval},#{entity.maxRetries},#{entity.maximum},#{entity.baseUrl},#{entity.serverIp},#{entity.serverPort},#{entity.sender},#{entity.statusCallBack},#{entity.url},#{entity.templateUrl},#{entity.codeUrl},#{entity.verifyUrl},#{entity.needUp},#{entity.connTimeout},#{entity.isSimple},#{entity.callbackUrl},#{entity.mchId},#{entity.appKey},#{entity.appId},#{entity.version},#{entity.singleMsgUrl},#{entity.massMsgUrl},#{entity.signatureId},#{entity.createdBy},#{entity.createdTime},#{entity.updateTime},#{entity.updateBy},#{entity.isDeleted})
|
||||||
|
</foreach>
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
|
||||||
|
insert into
|
||||||
|
schisandra_sms_config(config_id,request_url,template_name,'action',region,access_key_id,access_key_secret,supplier,signature,sdk_app_id,template_id,weight,retry_interval,max_retries,maximum,base_url,server_ip,server_port,sender,status_call_back,url,template_url,code_url,verify_url,need_up,conn_timeout,is_simple,callback_url,mch_id,app_key,app_id,version,single_msg_url,mass_msg_url,signature_Id,created_by,created_time,update_time,update_by,is_deleted)
|
||||||
|
values
|
||||||
|
<foreach collection="entities" item="entity" separator=",">
|
||||||
|
(#{entity.configId},#{entity.requestUrl},#{entity.templateName},#{entity.action},#{entity.region},#{entity.accessKeyId},#{entity.accessKeySecret},#{entity.supplier},#{entity.signature},#{entity.sdkAppId},#{entity.templateId},#{entity.weight},#{entity.retryInterval},#{entity.maxRetries},#{entity.maximum},#{entity.baseUrl},#{entity.serverIp},#{entity.serverPort},#{entity.sender},#{entity.statusCallBack},#{entity.url},#{entity.templateUrl},#{entity.codeUrl},#{entity.verifyUrl},#{entity.needUp},#{entity.connTimeout},#{entity.isSimple},#{entity.callbackUrl},#{entity.mchId},#{entity.appKey},#{entity.appId},#{entity.version},#{entity.singleMsgUrl},#{entity.massMsgUrl},#{entity.signatureId},#{entity.createdBy},#{entity.createdTime},#{entity.updateTime},#{entity.updateBy},#{entity.isDeleted})
|
||||||
|
</foreach>
|
||||||
|
on duplicate key update
|
||||||
|
config_id = values(config_id)request_url = values(request_url)template_name = values(template_name)action =
|
||||||
|
values(action)region = values(region)access_key_id = values(access_key_id)access_key_secret =
|
||||||
|
values(access_key_secret)supplier = values(supplier)signature = values(signature)sdk_app_id =
|
||||||
|
values(sdk_app_id)template_id = values(template_id)weight = values(weight)retry_interval =
|
||||||
|
values(retry_interval)max_retries = values(max_retries)maximum = values(maximum)base_url =
|
||||||
|
values(base_url)server_ip = values(server_ip)server_port = values(server_port)sender =
|
||||||
|
values(sender)status_call_back = values(status_call_back)url = values(url)template_url =
|
||||||
|
values(template_url)code_url = values(code_url)verify_url = values(verify_url)need_up =
|
||||||
|
values(need_up)conn_timeout = values(conn_timeout)is_simple = values(is_simple)callback_url =
|
||||||
|
values(callback_url)mch_id = values(mch_id)app_key = values(app_key)app_id = values(app_id)version =
|
||||||
|
values(version)single_msg_url = values(single_msg_url)mass_msg_url = values(mass_msg_url)signature_Id =
|
||||||
|
values(signature_Id)created_by = values(created_by)created_time = values(created_time)update_time =
|
||||||
|
values(update_time)update_by = values(update_by)is_deleted = values(is_deleted)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<!--通过主键修改数据-->
|
||||||
|
<update id="update">
|
||||||
|
update schisandra_sms_config
|
||||||
|
<set>
|
||||||
|
<if test="configId != null and configId != ''">
|
||||||
|
config_id = #{configId},
|
||||||
|
</if>
|
||||||
|
<if test="requestUrl != null and requestUrl != ''">
|
||||||
|
request_url = #{requestUrl},
|
||||||
|
</if>
|
||||||
|
<if test="templateName != null and templateName != ''">
|
||||||
|
template_name = #{templateName},
|
||||||
|
</if>
|
||||||
|
<if test="action != null and action != ''">
|
||||||
|
`action` = #{action},
|
||||||
|
</if>
|
||||||
|
<if test="region != null and region != ''">
|
||||||
|
region = #{region},
|
||||||
|
</if>
|
||||||
|
<if test="accessKeyId != null and accessKeyId != ''">
|
||||||
|
access_key_id = #{accessKeyId},
|
||||||
|
</if>
|
||||||
|
<if test="accessKeySecret != null and accessKeySecret != ''">
|
||||||
|
access_key_secret = #{accessKeySecret},
|
||||||
|
</if>
|
||||||
|
<if test="supplier != null and supplier != ''">
|
||||||
|
supplier = #{supplier},
|
||||||
|
</if>
|
||||||
|
<if test="signature != null and signature != ''">
|
||||||
|
signature = #{signature},
|
||||||
|
</if>
|
||||||
|
<if test="sdkAppId != null and sdkAppId != ''">
|
||||||
|
sdk_app_id = #{sdkAppId},
|
||||||
|
</if>
|
||||||
|
<if test="templateId != null and templateId != ''">
|
||||||
|
template_id = #{templateId},
|
||||||
|
</if>
|
||||||
|
<if test="weight != null">
|
||||||
|
weight = #{weight},
|
||||||
|
</if>
|
||||||
|
<if test="retryInterval != null">
|
||||||
|
retry_interval = #{retryInterval},
|
||||||
|
</if>
|
||||||
|
<if test="maxRetries != null">
|
||||||
|
max_retries = #{maxRetries},
|
||||||
|
</if>
|
||||||
|
<if test="maximum != null">
|
||||||
|
maximum = #{maximum},
|
||||||
|
</if>
|
||||||
|
<if test="baseUrl != null and baseUrl != ''">
|
||||||
|
base_url = #{baseUrl},
|
||||||
|
</if>
|
||||||
|
<if test="serverIp != null and serverIp != ''">
|
||||||
|
server_ip = #{serverIp},
|
||||||
|
</if>
|
||||||
|
<if test="serverPort != null">
|
||||||
|
server_port = #{serverPort},
|
||||||
|
</if>
|
||||||
|
<if test="sender != null and sender != ''">
|
||||||
|
sender = #{sender},
|
||||||
|
</if>
|
||||||
|
<if test="statusCallBack != null and statusCallBack != ''">
|
||||||
|
status_call_back = #{statusCallBack},
|
||||||
|
</if>
|
||||||
|
<if test="url != null and url != ''">
|
||||||
|
url = #{url},
|
||||||
|
</if>
|
||||||
|
<if test="templateUrl != null and templateUrl != ''">
|
||||||
|
template_url = #{templateUrl},
|
||||||
|
</if>
|
||||||
|
<if test="codeUrl != null and codeUrl != ''">
|
||||||
|
code_url = #{codeUrl},
|
||||||
|
</if>
|
||||||
|
<if test="verifyUrl != null and verifyUrl != ''">
|
||||||
|
verify_url = #{verifyUrl},
|
||||||
|
</if>
|
||||||
|
<if test="needUp != null and needUp != ''">
|
||||||
|
need_up = #{needUp},
|
||||||
|
</if>
|
||||||
|
<if test="connTimeout != null">
|
||||||
|
conn_timeout = #{connTimeout},
|
||||||
|
</if>
|
||||||
|
<if test="isSimple != null and isSimple != ''">
|
||||||
|
is_simple = #{isSimple},
|
||||||
|
</if>
|
||||||
|
<if test="callbackUrl != null and callbackUrl != ''">
|
||||||
|
callback_url = #{callbackUrl},
|
||||||
|
</if>
|
||||||
|
<if test="mchId != null">
|
||||||
|
mch_id = #{mchId},
|
||||||
|
</if>
|
||||||
|
<if test="appKey != null and appKey != ''">
|
||||||
|
app_key = #{appKey},
|
||||||
|
</if>
|
||||||
|
<if test="appId != null">
|
||||||
|
app_id = #{appId},
|
||||||
|
</if>
|
||||||
|
<if test="version != null and version != ''">
|
||||||
|
version = #{version},
|
||||||
|
</if>
|
||||||
|
<if test="singleMsgUrl != null and singleMsgUrl != ''">
|
||||||
|
single_msg_url = #{singleMsgUrl},
|
||||||
|
</if>
|
||||||
|
<if test="massMsgUrl != null and massMsgUrl != ''">
|
||||||
|
mass_msg_url = #{massMsgUrl},
|
||||||
|
</if>
|
||||||
|
<if test="signatureId != null and signatureId != ''">
|
||||||
|
signature_Id = #{signatureId},
|
||||||
|
</if>
|
||||||
|
<if test="createdBy != null and createdBy != ''">
|
||||||
|
created_by = #{createdBy},
|
||||||
|
</if>
|
||||||
|
<if test="createdTime != null">
|
||||||
|
created_time = #{createdTime},
|
||||||
|
</if>
|
||||||
|
<if test="updateTime != null">
|
||||||
|
update_time = #{updateTime},
|
||||||
|
</if>
|
||||||
|
<if test="updateBy != null and updateBy != ''">
|
||||||
|
update_by = #{updateBy},
|
||||||
|
</if>
|
||||||
|
<if test="isDeleted != null">
|
||||||
|
is_deleted = #{isDeleted},
|
||||||
|
</if>
|
||||||
|
</set>
|
||||||
|
where id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<!--通过主键删除-->
|
||||||
|
<delete id="deleteById">
|
||||||
|
delete
|
||||||
|
from schisandra_sms_config
|
||||||
|
where id = #{id}
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
@@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
Navicat Premium Data Transfer
|
||||||
|
|
||||||
|
Source Server : MySQL Cloud
|
||||||
|
Source Server Type : MySQL
|
||||||
|
Source Server Version : 50744 (5.7.44)
|
||||||
|
Source Host : 116.196.80.239:3306
|
||||||
|
Source Schema : schisandra-cloud-storage
|
||||||
|
|
||||||
|
Target Server Type : MySQL
|
||||||
|
Target Server Version : 50744 (5.7.44)
|
||||||
|
File Encoding : 65001
|
||||||
|
|
||||||
|
Date: 26/04/2024 01:28:16
|
||||||
|
*/
|
||||||
|
|
||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for schisandra_auth_permission
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `schisandra_auth_permission`;
|
||||||
|
CREATE TABLE `schisandra_auth_permission` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`parent_id` bigint(20) NULL DEFAULT NULL,
|
||||||
|
`type` tinyint(4) NULL DEFAULT NULL,
|
||||||
|
`menu_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`status` tinyint(4) NULL DEFAULT NULL,
|
||||||
|
`show` tinyint(4) NULL DEFAULT NULL,
|
||||||
|
`icon` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`permission_key` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
|
||||||
|
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
|
||||||
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
`is_deleted` int(11) NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Records of schisandra_auth_permission
|
||||||
|
-- ----------------------------
|
||||||
|
INSERT INTO `schisandra_auth_permission` VALUES (1, '普通用户', 0, 1, '1adiwd/awdw', 0, 0, 'httt://1.png', 'subject:add', NULL, NULL, NULL, NULL, 1);
|
||||||
|
INSERT INTO `schisandra_auth_permission` VALUES (2, '管理员', 0, 1, '1adiwd/awdw', 0, 0, 'httt://1.png', 'subject:add', NULL, NULL, NULL, NULL, 0);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for schisandra_auth_role
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `schisandra_auth_role`;
|
||||||
|
CREATE TABLE `schisandra_auth_role` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`role_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`role_key` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
|
||||||
|
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
|
||||||
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
`is_deleted` int(11) NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Records of schisandra_auth_role
|
||||||
|
-- ----------------------------
|
||||||
|
INSERT INTO `schisandra_auth_role` VALUES (1, '普通用户', 'normal_user', NULL, NULL, NULL, NULL, 0);
|
||||||
|
INSERT INTO `schisandra_auth_role` VALUES (2, '管理员', 'admin', NULL, NULL, NULL, NULL, 0);
|
||||||
|
INSERT INTO `schisandra_auth_role` VALUES (3, '超级管理员', 'super_admin', NULL, NULL, NULL, NULL, 0);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for schisandra_auth_role_permission
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `schisandra_auth_role_permission`;
|
||||||
|
CREATE TABLE `schisandra_auth_role_permission` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`role_id` bigint(20) NULL DEFAULT NULL,
|
||||||
|
`permission_id` bigint(20) NULL DEFAULT NULL,
|
||||||
|
`created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
|
||||||
|
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
|
||||||
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
`is_deleted` int(11) NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Records of schisandra_auth_role_permission
|
||||||
|
-- ----------------------------
|
||||||
|
INSERT INTO `schisandra_auth_role_permission` VALUES (1, 2, 1, NULL, NULL, NULL, NULL, 0);
|
||||||
|
INSERT INTO `schisandra_auth_role_permission` VALUES (2, 3, 2, NULL, NULL, NULL, NULL, 0);
|
||||||
|
INSERT INTO `schisandra_auth_role_permission` VALUES (3, 1, 1, NULL, NULL, NULL, NULL, 0);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for schisandra_auth_user
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `schisandra_auth_user`;
|
||||||
|
CREATE TABLE `schisandra_auth_user` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`user_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`nick_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`email` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`phone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`sex` tinyint(4) NULL DEFAULT NULL,
|
||||||
|
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`status` tinyint(4) NULL DEFAULT NULL,
|
||||||
|
`introduce` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`ext_json` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||||
|
`created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
|
||||||
|
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
|
||||||
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
`is_deleted` int(11) NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Records of schisandra_auth_user
|
||||||
|
-- ----------------------------
|
||||||
|
INSERT INTO `schisandra_auth_user` VALUES (8, 'oF9UX6c2GNEHUpoQZRTrkHTmLYHs', NULL, NULL, NULL, NULL, NULL, 'http://117.72.10.84:9000/user/icon/微信图片_20231203153718(1).png', 0, NULL, NULL, NULL, NULL, NULL, NULL, 0);
|
||||||
|
INSERT INTO `schisandra_auth_user` VALUES (9, '666', '666', '666', '555', '666', 1, '', 1, '', '', NULL, NULL, NULL, NULL, 1);
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for schisandra_auth_user_role
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `schisandra_auth_user_role`;
|
||||||
|
CREATE TABLE `schisandra_auth_user_role` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`user_id` bigint(20) NULL DEFAULT NULL,
|
||||||
|
`role_id` bigint(20) NULL DEFAULT NULL,
|
||||||
|
`created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
|
||||||
|
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
|
||||||
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
`is_deleted` int(11) NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Records of schisandra_auth_user_role
|
||||||
|
-- ----------------------------
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
@@ -101,6 +101,35 @@
|
|||||||
</excludes>
|
</excludes>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.13.0</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
|
<annotationProcessorPaths>
|
||||||
|
<path>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.24</version>
|
||||||
|
</path>
|
||||||
|
<!-- 必须要加, 否则生成不了 MapperImpl 实现类 -->
|
||||||
|
<path>
|
||||||
|
<groupId>org.mapstruct</groupId>
|
||||||
|
<artifactId>mapstruct-processor</artifactId>
|
||||||
|
<version>1.4.2.Final</version>
|
||||||
|
</path>
|
||||||
|
<!-- 如果是 0.1.0 有可能出现生成了maptruct的实现类, 但该类只创建了对象, 没有进行赋值 -->
|
||||||
|
<path>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok-mapstruct-binding</artifactId>
|
||||||
|
<version>0.2.0</version>
|
||||||
|
</path>
|
||||||
|
</annotationProcessorPaths>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
</project>
|
</project>
|
||||||
|
@@ -2,10 +2,10 @@ server:
|
|||||||
port: 3000
|
port: 3000
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
username: landaiqing
|
username: root
|
||||||
password: Z1JyO9hVmDLYbpWnM7oiFO3BEoDCrV6njYjl/2oudBHwTepxLxnaZ1aDfohrYwYpGWUodgu7gnRcZ5mfIm6lIg==
|
password: BZbVbGDBePiA2q8/mt0eMxKNpHniDzxBtOxFadQiAOTDzCDlopC4qOKwwBEi9CAZcuFsCrRJdwn0wP6jwsnzxw==
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://116.196.80.239:3306/schisandra-cloud-storage?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
|
url: jdbc:mysql://1.95.0.111:3306/schisandra-cloud-storage?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
|
||||||
type: com.alibaba.druid.pool.DruidDataSource
|
type: com.alibaba.druid.pool.DruidDataSource
|
||||||
druid:
|
druid:
|
||||||
initial-size: 20
|
initial-size: 20
|
||||||
@@ -32,7 +32,7 @@ spring:
|
|||||||
# Redis数据库索引(默认为0)
|
# Redis数据库索引(默认为0)
|
||||||
database: 1
|
database: 1
|
||||||
# Redis服务器地址
|
# Redis服务器地址
|
||||||
host: 116.196.80.239
|
host: 1.95.0.111
|
||||||
# Redis服务器连接端口
|
# Redis服务器连接端口
|
||||||
port: 6379
|
port: 6379
|
||||||
# Redis服务器连接密码(默认为空)
|
# Redis服务器连接密码(默认为空)
|
||||||
@@ -49,7 +49,7 @@ spring:
|
|||||||
max-idle: 10
|
max-idle: 10
|
||||||
# 连接池中的最小空闲连接
|
# 连接池中的最小空闲连接
|
||||||
min-idle: 0
|
min-idle: 0
|
||||||
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKXX1HPAKowh8Ub9fDTGI5exGLMRppbVQFDlDBBxAWcbfdLN5hXgfg02D7wy+jCe9uCdV5vgZR72PFoe+mnLp80CAwEAAQ==
|
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANUVxjcrVoirBZaNmDrUqatHEW4FOHbO5ynW6zvhIbRMo6hEFGgglbURkjuHOlgEduxJVz6Xa+sG+FMrxTguOJECAwEAAQ==
|
||||||
logging:
|
logging:
|
||||||
config: classpath:log4j2-spring.xml
|
config: classpath:log4j2-spring.xml
|
||||||
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
|
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
|
||||||
@@ -67,41 +67,23 @@ sa-token:
|
|||||||
# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
|
# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
|
||||||
token-style: random-32
|
token-style: random-32
|
||||||
# 是否输出操作日志
|
# 是否输出操作日志
|
||||||
is-log: true
|
is-log: false
|
||||||
token-prefix: schisandra
|
token-prefix: schisandra
|
||||||
|
is-print: false
|
||||||
|
|
||||||
#sms:
|
sms:
|
||||||
# # 标注从yml读取配置
|
# 标注从yml读取配置
|
||||||
# config-type: yaml
|
config-type: yaml
|
||||||
# blends:
|
restricted: true
|
||||||
# # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文)
|
accountMax: 10
|
||||||
# tx1:
|
minuteMax: 1
|
||||||
# #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
|
isPrint: false
|
||||||
# supplier: tencent
|
HttpLog: true
|
||||||
# #您的accessKey
|
|
||||||
# access-key-id: 您的accessKey
|
# mybatis-plus日志
|
||||||
# #您的accessKeySecret
|
mybatis-plus:
|
||||||
# access-key-secret: 您的accessKeySecret
|
global-config:
|
||||||
# #您的短信签名
|
banner: false
|
||||||
# signature: 您的短信签名
|
|
||||||
# #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置
|
|
||||||
# template-id: xxxxxxxx
|
|
||||||
# #您的sdkAppId
|
|
||||||
# sdk-app-id: 您的sdkAppId
|
|
||||||
# # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文)
|
|
||||||
# tx2:
|
|
||||||
# #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
|
|
||||||
# supplier: tencent
|
|
||||||
# #您的accessKey
|
|
||||||
# access-key-id: 您的accessKey
|
|
||||||
# #您的accessKeySecret
|
|
||||||
# access-key-secret: 您的accessKeySecret
|
|
||||||
# #您的短信签名
|
|
||||||
# signature: 您的短信签名
|
|
||||||
# #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置
|
|
||||||
# template-id: xxxxxxxx
|
|
||||||
# #您的sdkAppId
|
|
||||||
# sdk-app-id: 您的sdkAppId
|
|
||||||
|
|
||||||
justauth:
|
justauth:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
${AnsiColor.GREEN}
|
|
||||||
|
|
||||||
,---,
|
,---,
|
||||||
,--.' | ,--, ,---,
|
,--.' | ,--, ,---,
|
||||||
|
@@ -6,12 +6,12 @@ spring:
|
|||||||
cloud:
|
cloud:
|
||||||
nacos:
|
nacos:
|
||||||
config:
|
config:
|
||||||
server-addr: 116.196.80.239:8848
|
server-addr: 1.95.0.111:8848
|
||||||
prefix: ${spring.application.name}
|
prefix: ${spring.application.name}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
namespace:
|
namespace:
|
||||||
file-extension: yaml
|
file-extension: yaml
|
||||||
discovery:
|
discovery:
|
||||||
enabled: true
|
enabled: true
|
||||||
server-addr: 116.196.80.239:8848
|
server-addr: 1.95.0.111:8848
|
||||||
|
|
||||||
|
@@ -7,10 +7,10 @@
|
|||||||
<Properties>
|
<Properties>
|
||||||
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
|
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
|
||||||
<!-- %logger{36} 表示 Logger 名字最长36个字符 -->
|
<!-- %logger{36} 表示 Logger 名字最长36个字符 -->
|
||||||
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} %X{PFTID} [%thread] %-5level %logger{36} - %msg%n" />
|
<property name="LOG_PATTERN" value="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx" />
|
||||||
<!-- 定义日志存储的路径 -->
|
<!-- 定义日志存储的路径 -->
|
||||||
<property name="FILE_PATH" value="../log" />
|
<property name="FILE_PATH" value="../log" />
|
||||||
<property name="FILE_NAME" value="schisandra-cloud-album.log" />
|
<property name="FILE_NAME" value="schisandra-cloud-storage.log" />
|
||||||
</Properties>
|
</Properties>
|
||||||
|
|
||||||
<!--https://logging.apache.org/log4j/2.x/manual/appenders.html-->
|
<!--https://logging.apache.org/log4j/2.x/manual/appenders.html-->
|
||||||
|
@@ -9,10 +9,125 @@
|
|||||||
<name>schisandra-cloud-storage-gateway</name>
|
<name>schisandra-cloud-storage-gateway</name>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
<spring-boot.version>2.4.2</spring-boot.version>
|
||||||
|
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
|
||||||
|
<spring-cloud.version>2020.0.6</spring-cloud.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.20</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-bootstrap</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-gateway</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-loadbalancer</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:https://sa-token.cc -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.dev33</groupId>
|
||||||
|
<artifactId>sa-token-reactor-spring-boot-starter</artifactId>
|
||||||
|
<version>1.37.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.dev33</groupId>
|
||||||
|
<artifactId>sa-token-redis-jackson</artifactId>
|
||||||
|
<version>1.37.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-pool2</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>2.8.9</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-dependencies</artifactId>
|
||||||
|
<version>${spring-cloud.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-dependencies</artifactId>
|
||||||
|
<version>${spring-boot.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
|
||||||
|
<version>${spring-cloud-alibaba.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>${project.artifactId}</finalName>
|
||||||
|
<!--打包成jar包时的名字-->
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<version>2.3.0.RELEASE</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>repackage</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>central</id>
|
||||||
|
<name>aliyun maven</name>
|
||||||
|
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
|
||||||
|
<layout>default</layout>
|
||||||
|
<releases>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</releases>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
</project>
|
</project>
|
||||||
|
@@ -0,0 +1,19 @@
|
|||||||
|
package com.schisandra.gateway;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网关启动类
|
||||||
|
*
|
||||||
|
* @author: landaiqing
|
||||||
|
* @date: 2024/2/7
|
||||||
|
*/
|
||||||
|
@SpringBootApplication
|
||||||
|
@ComponentScan("com.schisandra")
|
||||||
|
public class GatewayApplication {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(GatewayApplication.class);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,32 @@
|
|||||||
|
package com.schisandra.gateway.auth;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.context.SaHolder;
|
||||||
|
import cn.dev33.satoken.reactor.filter.SaReactorFilter;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 权限认证的配置器
|
||||||
|
*
|
||||||
|
* @author: landaiqing
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class SaTokenConfigure {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public SaReactorFilter getSaReactorFilter() {
|
||||||
|
return new SaReactorFilter()
|
||||||
|
// 拦截地址
|
||||||
|
.addInclude("/**")
|
||||||
|
// 鉴权方法:每次访问进入
|
||||||
|
.setAuth(obj -> {
|
||||||
|
System.out.println("-------- 前端访问path:" + SaHolder.getRequest().getRequestPath());
|
||||||
|
// 登录校验 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
|
||||||
|
//SaRouter.match("/auth/**", "/auth/user/doLogin", r -> StpUtil.checkRole("admin"));
|
||||||
|
// SaRouter.match("/oss/**", r -> StpUtil.checkLogin());
|
||||||
|
// SaRouter.match("/subject/subject/add", r -> StpUtil.checkPermission("subject:add"));
|
||||||
|
// SaRouter.match("/subject/**", r -> StpUtil.checkLogin());
|
||||||
|
})
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,62 @@
|
|||||||
|
package com.schisandra.gateway.auth;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.stp.StpInterface;
|
||||||
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import com.schisandra.gateway.entity.AuthPermission;
|
||||||
|
import com.schisandra.gateway.entity.AuthRole;
|
||||||
|
import com.schisandra.gateway.redis.RedisUtil;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义权限验证接口扩展
|
||||||
|
*
|
||||||
|
* @author: landaiqing
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class StpInterfaceImpl implements StpInterface {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
|
private String authPermissionPrefix = "auth.permission";
|
||||||
|
|
||||||
|
private String authRolePrefix = "auth.role";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getPermissionList(Object loginId, String loginType) {
|
||||||
|
return getAuth(loginId.toString(), authPermissionPrefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getRoleList(Object loginId, String loginType) {
|
||||||
|
return getAuth(loginId.toString(), authRolePrefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getAuth(String loginId, String prefix) {
|
||||||
|
String authKey = redisUtil.buildKey(prefix, loginId.toString());
|
||||||
|
String authValue = redisUtil.get(authKey);
|
||||||
|
if (StringUtils.isBlank(authValue)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<String> authList = new LinkedList<>();
|
||||||
|
if (authRolePrefix.equals(prefix)) {
|
||||||
|
List<AuthRole> roleList = new Gson().fromJson(authValue, new TypeToken<List<AuthRole>>() {
|
||||||
|
}.getType());
|
||||||
|
authList = roleList.stream().map(AuthRole::getRoleKey).collect(Collectors.toList());
|
||||||
|
} else if (authPermissionPrefix.equals(prefix)) {
|
||||||
|
List<AuthPermission> permissionList = new Gson().fromJson(authValue, new TypeToken<List<AuthPermission>>() {
|
||||||
|
}.getType());
|
||||||
|
authList = permissionList.stream().map(AuthPermission::getPermissionKey).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return authList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,53 @@
|
|||||||
|
package com.schisandra.gateway.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (AuthPermission)实体类
|
||||||
|
*
|
||||||
|
* @author landaiqing
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class AuthPermission implements Serializable {
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
private String menuUrl;
|
||||||
|
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
private Integer show;
|
||||||
|
|
||||||
|
private String icon;
|
||||||
|
|
||||||
|
private String permissionKey;
|
||||||
|
/**
|
||||||
|
* 创建人
|
||||||
|
*/
|
||||||
|
private String createdBy;
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createdTime;
|
||||||
|
/**
|
||||||
|
* 更新人
|
||||||
|
*/
|
||||||
|
private String updateBy;
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
private Date updateTime;
|
||||||
|
|
||||||
|
private Integer isDeleted;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,42 @@
|
|||||||
|
package com.schisandra.gateway.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (AuthRole)实体类
|
||||||
|
*
|
||||||
|
* @author landaiqing
|
||||||
|
* @since 2024-2-18 18:55:50
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class AuthRole implements Serializable {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String roleName;
|
||||||
|
|
||||||
|
private String roleKey;
|
||||||
|
/**
|
||||||
|
* 创建人
|
||||||
|
*/
|
||||||
|
private String createdBy;
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createdTime;
|
||||||
|
/**
|
||||||
|
* 更新人
|
||||||
|
*/
|
||||||
|
private String updateBy;
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
private Date updateTime;
|
||||||
|
|
||||||
|
private Integer isDeleted;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,59 @@
|
|||||||
|
package com.schisandra.gateway.entity;
|
||||||
|
|
||||||
|
import com.schisandra.gateway.enums.ResultCodeEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Result<T> {
|
||||||
|
|
||||||
|
private Boolean success;
|
||||||
|
|
||||||
|
private Integer code;
|
||||||
|
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
private T data;
|
||||||
|
|
||||||
|
public static Result ok(){
|
||||||
|
Result result = new Result();
|
||||||
|
result.setSuccess(true);
|
||||||
|
result.setCode(ResultCodeEnum.SUCCESS.getCode());
|
||||||
|
result.setMessage(ResultCodeEnum.SUCCESS.getDesc());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result ok(T data){
|
||||||
|
Result result = new Result();
|
||||||
|
result.setSuccess(true);
|
||||||
|
result.setCode(ResultCodeEnum.SUCCESS.getCode());
|
||||||
|
result.setMessage(ResultCodeEnum.SUCCESS.getDesc());
|
||||||
|
result.setData(data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Result fail(){
|
||||||
|
Result result = new Result();
|
||||||
|
result.setSuccess(false);
|
||||||
|
result.setCode(ResultCodeEnum.FAIL.getCode());
|
||||||
|
result.setMessage(ResultCodeEnum.FAIL.getDesc());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Result fail(T data){
|
||||||
|
Result result = new Result();
|
||||||
|
result.setSuccess(false);
|
||||||
|
result.setCode(ResultCodeEnum.FAIL.getCode());
|
||||||
|
result.setMessage(ResultCodeEnum.FAIL.getDesc());
|
||||||
|
result.setData(data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Result fail(Integer code,String message){
|
||||||
|
Result result = new Result();
|
||||||
|
result.setSuccess(false);
|
||||||
|
result.setCode(code);
|
||||||
|
result.setMessage(message);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,24 @@
|
|||||||
|
package com.schisandra.gateway.enums;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum ResultCodeEnum {
|
||||||
|
SUCCESS(200,"成功"),
|
||||||
|
FAIL(500,"失败");
|
||||||
|
private int code;
|
||||||
|
private String desc;
|
||||||
|
|
||||||
|
ResultCodeEnum(int code,String desc){
|
||||||
|
this.code=code;
|
||||||
|
this.desc=desc;
|
||||||
|
}
|
||||||
|
public static ResultCodeEnum getByCode(int codeVal){
|
||||||
|
for(ResultCodeEnum resultCodeEnum:ResultCodeEnum.values()){
|
||||||
|
if(resultCodeEnum.code==codeVal){
|
||||||
|
return resultCodeEnum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,55 @@
|
|||||||
|
package com.schisandra.gateway.exception;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.exception.SaTokenException;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.schisandra.gateway.entity.Result;
|
||||||
|
import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
|
||||||
|
import org.springframework.core.io.buffer.DataBufferFactory;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Classname GatewayExceptionHandler
|
||||||
|
* @BelongsProject: qing-yu-club
|
||||||
|
* @BelongsPackage: com.landaiqing.club.gateway.exception
|
||||||
|
* @Author: landaiqing
|
||||||
|
* @CreateTime: 2024-05-18 17:52
|
||||||
|
* @Description: 网关全局异常处理
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class GatewayExceptionHandler implements ErrorWebExceptionHandler {
|
||||||
|
private ObjectMapper objectMapper=new ObjectMapper();
|
||||||
|
@Override
|
||||||
|
public Mono<Void> handle(ServerWebExchange serverWebExchange, Throwable throwable) {
|
||||||
|
ServerHttpRequest request = serverWebExchange.getRequest();
|
||||||
|
ServerHttpResponse response = serverWebExchange.getResponse();
|
||||||
|
Integer code=200;
|
||||||
|
String message="";
|
||||||
|
if(throwable instanceof SaTokenException){
|
||||||
|
code=401;
|
||||||
|
message="用户无权限";
|
||||||
|
}else {
|
||||||
|
code=500;
|
||||||
|
message="系统繁忙";
|
||||||
|
}
|
||||||
|
Result result = Result.fail(code, message);
|
||||||
|
response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
|
||||||
|
return response.writeWith(Mono.fromSupplier(()->{
|
||||||
|
DataBufferFactory dataBufferFactory=response.bufferFactory();
|
||||||
|
byte[] bytes=null;
|
||||||
|
try {
|
||||||
|
bytes = objectMapper.writeValueAsBytes(result);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return dataBufferFactory.wrap(bytes);
|
||||||
|
}));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,46 @@
|
|||||||
|
package com.schisandra.gateway.filter;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
||||||
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Classname LoginFilter
|
||||||
|
* @BelongsProject: qing-yu-club
|
||||||
|
* @BelongsPackage: com.landaiqing.club.gateway.filter
|
||||||
|
* @Author: landaiqing
|
||||||
|
* @CreateTime: 2024-03-03 17:41
|
||||||
|
* @Description: 登录拦截器
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class LoginFilter implements GlobalFilter {
|
||||||
|
@Override
|
||||||
|
@SneakyThrows
|
||||||
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
|
ServerHttpRequest request = exchange.getRequest();
|
||||||
|
ServerHttpRequest.Builder mutate = request.mutate();
|
||||||
|
String url = request.getURI().getPath();
|
||||||
|
log.info("LoginFilter.filter.url:{}", url);
|
||||||
|
if (url.equals("/user/doLogin") || url.equals("/user/getUserInfo")) {
|
||||||
|
return chain.filter(exchange);
|
||||||
|
}
|
||||||
|
SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
|
||||||
|
String loginId = (String) tokenInfo.getLoginId();
|
||||||
|
if (StringUtils.isEmpty(loginId)) {
|
||||||
|
throw new Exception("未获取到用户信息");
|
||||||
|
}
|
||||||
|
mutate.header("loginId", loginId);
|
||||||
|
|
||||||
|
return chain.filter(exchange.mutate().request(mutate.build()).build());
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,49 @@
|
|||||||
|
package com.schisandra.gateway.redis;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
|
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
||||||
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||||||
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
||||||
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Classname RedisConfig
|
||||||
|
* @BelongsProject: qing-yu-club
|
||||||
|
* @BelongsPackage: com.landaiqing.club.gateway.redis
|
||||||
|
* @Author: landaiqing
|
||||||
|
* @CreateTime: 2024-02-18 18:10
|
||||||
|
* @Description: redis的config处理
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class RedisConfig {
|
||||||
|
@Bean
|
||||||
|
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||||
|
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
|
||||||
|
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
|
||||||
|
redisTemplate.setConnectionFactory(redisConnectionFactory);
|
||||||
|
redisTemplate.setKeySerializer(redisSerializer);
|
||||||
|
redisTemplate.setHashKeySerializer(redisSerializer);
|
||||||
|
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
|
||||||
|
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer());
|
||||||
|
return redisTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
|
||||||
|
Jackson2JsonRedisSerializer<Object> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
||||||
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
|
||||||
|
jsonRedisSerializer.setObjectMapper(objectMapper);
|
||||||
|
return jsonRedisSerializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,107 @@
|
|||||||
|
package com.schisandra.gateway.redis;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RedisUtil工具类
|
||||||
|
*
|
||||||
|
* @author: landaiqing
|
||||||
|
* @date: 2024/2/19
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class RedisUtil {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisTemplate redisTemplate;
|
||||||
|
|
||||||
|
private static final String CACHE_KEY_SEPARATOR = ".";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建缓存key
|
||||||
|
*/
|
||||||
|
public String buildKey(String... strObjs) {
|
||||||
|
return Stream.of(strObjs).collect(Collectors.joining(CACHE_KEY_SEPARATOR));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否存在key
|
||||||
|
*/
|
||||||
|
public boolean exist(String key) {
|
||||||
|
return redisTemplate.hasKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除key
|
||||||
|
*/
|
||||||
|
public boolean del(String key) {
|
||||||
|
return redisTemplate.delete(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set(不带过期)
|
||||||
|
*/
|
||||||
|
public void set(String key, String value) {
|
||||||
|
redisTemplate.opsForValue().set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set(带过期)
|
||||||
|
*/
|
||||||
|
public boolean setNx(String key, String value, Long time, TimeUnit timeUnit) {
|
||||||
|
return redisTemplate.opsForValue().setIfAbsent(key, value, time, timeUnit);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取string类型缓存
|
||||||
|
*/
|
||||||
|
public String get(String key) {
|
||||||
|
return (String) redisTemplate.opsForValue().get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean zAdd(String key, String value, Long score) {
|
||||||
|
return redisTemplate.opsForZSet().add(key, value, Double.valueOf(String.valueOf(score)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long countZset(String key) {
|
||||||
|
return redisTemplate.opsForZSet().size(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> rangeZset(String key, long start, long end) {
|
||||||
|
return redisTemplate.opsForZSet().range(key, start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long removeZset(String key, Object value) {
|
||||||
|
return redisTemplate.opsForZSet().remove(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeZsetList(String key, Set<String> value) {
|
||||||
|
value.stream().forEach((val) -> redisTemplate.opsForZSet().remove(key, val));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double score(String key, Object value) {
|
||||||
|
return redisTemplate.opsForZSet().score(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> rangeByScore(String key, long start, long end) {
|
||||||
|
return redisTemplate.opsForZSet().rangeByScore(key, Double.valueOf(String.valueOf(start)), Double.valueOf(String.valueOf(end)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object addScore(String key, Object obj, double score) {
|
||||||
|
return redisTemplate.opsForZSet().incrementScore(key, obj, score);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object rank(String key, Object obj) {
|
||||||
|
return redisTemplate.opsForZSet().rank(key, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,57 @@
|
|||||||
|
server:
|
||||||
|
port: 5000
|
||||||
|
spring:
|
||||||
|
cloud:
|
||||||
|
gateway:
|
||||||
|
routes:
|
||||||
|
- id: oss
|
||||||
|
uri: lb://schisandra-cloud-storage-oss-dev
|
||||||
|
predicates:
|
||||||
|
- Path=/oss/**
|
||||||
|
filters:
|
||||||
|
- StripPrefix=1
|
||||||
|
- id: auth
|
||||||
|
uri: lb://schisandra-cloud-storage-auth-dev
|
||||||
|
predicates:
|
||||||
|
- Path=/auth/**
|
||||||
|
filters:
|
||||||
|
- StripPrefix=1
|
||||||
|
# redis配置
|
||||||
|
redis:
|
||||||
|
# Redis数据库索引(默认为0)
|
||||||
|
database: 1
|
||||||
|
# Redis服务器地址
|
||||||
|
host: 116.196.80.239
|
||||||
|
# Redis服务器连接端口
|
||||||
|
port: 6379
|
||||||
|
# Redis服务器连接密码(默认为空)
|
||||||
|
password: LDQ20020618xxx
|
||||||
|
# 连接超时时间
|
||||||
|
timeout: 2s
|
||||||
|
lettuce:
|
||||||
|
pool:
|
||||||
|
# 连接池最大连接数
|
||||||
|
max-active: 200
|
||||||
|
# 连接池最大阻塞等待时间(使用负值表示没有限制)
|
||||||
|
max-wait: -1ms
|
||||||
|
# 连接池中的最大空闲连接
|
||||||
|
max-idle: 10
|
||||||
|
# 连接池中的最小空闲连接
|
||||||
|
min-idle: 0
|
||||||
|
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
|
||||||
|
sa-token:
|
||||||
|
# token 名称(同时也是 cookie 名称)
|
||||||
|
token-name: token
|
||||||
|
# token 有效期(单位:秒) 默认30天,-1 代表永久有效
|
||||||
|
timeout: 2592000
|
||||||
|
# token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
|
||||||
|
active-timeout: -1
|
||||||
|
# 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
|
||||||
|
is-concurrent: true
|
||||||
|
# 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
|
||||||
|
is-share: true
|
||||||
|
# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
|
||||||
|
token-style: random-32
|
||||||
|
# 是否输出操作日志
|
||||||
|
is-log: true
|
||||||
|
token-prefix: schisandra
|
@@ -0,0 +1,17 @@
|
|||||||
|
spring:
|
||||||
|
application:
|
||||||
|
name: schisandra-cloud-storage-gateway-dev
|
||||||
|
profiles:
|
||||||
|
active: dev
|
||||||
|
cloud:
|
||||||
|
nacos:
|
||||||
|
config:
|
||||||
|
server-addr: 116.196.80.239:8848
|
||||||
|
prefix: ${spring.application.name}
|
||||||
|
group: DEFAULT_GROUP
|
||||||
|
namespace:
|
||||||
|
file-extension: yaml
|
||||||
|
discovery:
|
||||||
|
enabled: true
|
||||||
|
server-addr: 116.196.80.239:8848
|
||||||
|
|
@@ -38,7 +38,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.18.20</version>
|
<version>1.18.24</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba.cloud</groupId>
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
server:
|
server:
|
||||||
port: 4000
|
port: 4000
|
||||||
minio:
|
minio:
|
||||||
url: http://116.196.80.239:9000/
|
url: http://1.95.0.111:9000/
|
||||||
accessKey: landaiqing
|
accessKey: landaiqing
|
||||||
secretKey: LDQ20020618xxx
|
secretKey: LDQ20020618xxx
|
||||||
|
@@ -6,12 +6,12 @@ spring:
|
|||||||
cloud:
|
cloud:
|
||||||
nacos:
|
nacos:
|
||||||
config:
|
config:
|
||||||
server-addr: 116.196.80.239:8848
|
server-addr: 1.95.0.111:8848
|
||||||
prefix: ${spring.application.name}
|
prefix: ${spring.application.name}
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
namespace:
|
namespace:
|
||||||
file-extension: yaml
|
file-extension: yaml
|
||||||
discovery:
|
discovery:
|
||||||
enabled: true
|
enabled: true
|
||||||
server-addr: 116.196.80.239:8848
|
server-addr: 1.95.0.111:8848
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
<groupId>com.schisandra</groupId>
|
<groupId>com.schisandra</groupId>
|
||||||
<artifactId>schisandra-cloud-storage-wechat</artifactId>
|
<artifactId>schisandra-cloud-storage-wechat</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>jar</packaging>
|
||||||
<name>schisandra-cloud-storage-wechat</name>
|
<name>schisandra-cloud-storage-wechat</name>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.18.28</version>
|
<version>1.18.24</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
server:
|
server:
|
||||||
port: 3010
|
port: 80
|
||||||
spring:
|
spring:
|
||||||
# redis配置
|
# redis配置
|
||||||
redis:
|
redis:
|
||||||
# Redis数据库索引(默认为0)
|
# Redis数据库索引(默认为0)
|
||||||
database: 1
|
database: 1
|
||||||
# Redis服务器地址
|
# Redis服务器地址
|
||||||
host: 116.196.80.239
|
host: 1.95.0.111
|
||||||
# Redis服务器连接端口
|
# Redis服务器连接端口
|
||||||
port: 6379
|
port: 6379
|
||||||
# Redis服务器连接密码(默认为空)
|
# Redis服务器连接密码(默认为空)
|
||||||
|
Reference in New Issue
Block a user