
# 使用指南
#### 基础开发环境准备
安装的工具包括JDK、Maven、Eclipse和IDEA ，配置对应的环境变量，确保本地开发环境可用。
#### 使用说明
- 配置文件里的密钥，建议自行加密存储并实现解密逻辑。
- 输入的密钥，建议按全随机数生成，长度32字节以上。
 
#### 敏感数据加密
DevSporeSecurity集成Jasypt加解密组件，实现配置文件敏感数据自动加解密。
1. pom文件中添加如下依赖。 
   ```
   <dependency>
       <groupId>com.huaweicloud.devspore</groupId>
       <artifactId>devspore-security</artifactId>
       <version>${version}</version>
   </dependency>
   <!--或者-->
   <dependency>
       <groupId>com.huaweicloud.devspore</groupId>
       <artifactId>spring-boot-starter-huawei-devspore-security</artifactId>
       <version>${revision}</version>
   </dependency>
   ```
   
   
2. 配置masterkey，内容自行定义。 
   ![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002158430233.png)
   
   
3. 配置masterkey路径和需要加密的属性。 
   ```
   #在需要加密的属性前添加(NeedEnc)前缀 
   test=(NeedEnc)123 
   devspore.security.provider.jasypt.masterkey-path=D:/devsporesecurity
   ```
   
   
4. 配置masterkeypath的路径。 
   masterkeypath的路径需要满足如下要求：
   - 路径必须为如下路径：
     ```
     ${devspore.security.provider.jasypt.masterkey.path}/masterkey
     ```
     
   
   - masterKey属于敏感数据，需服务自行控制好权限。
     如果在windows上运行，则在第一次启动时会自动将配置文件加密，加密后的内容如下所示。
     ```
     test=(NeedDec)EBl1iK4irrKDl4lj0g+pPg== 
     devspore.security.provider.jasypt.masterkey-path=D:/devsporesecurity
     ```
     可以看到test对应的属性已变为加密数据。
     
    
   
   
 
#### hibernate-validator参数校验
1. pom引入依赖。 
   ```
   <dependency>
       <groupId>com.huaweicloud.devspore</groupId>
       <artifactId>devspore-security</artifactId>
       <version>${version}</version>
   </dependency>
   <!--或者-->
   <dependency>
       <groupId>com.huaweicloud.devspore</groupId>
       <artifactId>spring-boot-starter-huawei-devspore-security</artifactId>
       <version>${com.huaweicloud.version}</version>
   </dependency>
   ```
   
   
2. 校验使用。 
   ```
   @Data
   public class User {
     @NotBlank(message = "username is blank")
     private String username;
     @Pattern(regexp = "^1([34578])\\d{9}$", message = "incorrect mobile number format ")
     private String mobile;
     @NotNull(message = "age is blank")
     @Range(min = 5, max = 90, message = "age between 5 and 90")
     private Integer age;
   }
   @RestController
   @Validated
   public class DemoController {
       @RequestMapping("/demo1")
       public String testHandler1(@Past(message = "必须是过去的时间") Date date) {
           return "pass demo1";
       }
       @PostMapping("/demo2")
       public String testHandler2(@RequestBody @Valid User user) {
           return "pass demo2";
       }
   }
   ```
   
   
 
#### 常用约束
表1常用约束说明 
| 注解                          | 约束说明                          |
|:---|:---|
| @Null                       | 被注释的元素必须为null。                |
| @NotNull                    | 被注释的元素必须不为null。               |
| @AssertTrue                 | 被注释的元素必须为true。                |
| @AssertFalse                | 被注释的元素必须为false。               |
| @Min(value)                 | 被注释的元素必须是一个数字，其值必须大于等于指定的最小值。 |
| @Max(value)                 | 被注释的元素必须是一个数字，其值必须小于等于指定的最大值。 |
| @DecimalMin(value)          | 被注释的元素必须是一个数字，其值必须大于等于指定的最小值。 |
| @DecimalMax(value)          | 被注释的元素必须是一个数字，其值必须小于等于指定的最大值。 |
| @Size(max=, min=)           | 被注释的元素的大小必须在指定的范围内。           |
| @Digits (integer, fraction) | 被注释的元素必须是一个数字，其值必须在可接受的范围内。   |
| @Past                       | 被注释的元素必须是一个过去的日期。             |
| @Future                     | 被注释的元素必须是一个将来的日期。             |
| @Pattern(regex=,flag=)      | 被注释的元素必须符合指定的正则表达式。           |
| @NotBlank(message =)        | 验证字符串非null，且长度必须大于0。          |
| @Email                      | 被注释的元素必须是电子邮箱地址。              |
| @Length(min=,max=)          | 被注释的字符串的大小必须在指定的范围内。          |
| @NotEmpty                   | 被注释的字符串的必须非空。                 |
| @Range(min=,max=,message=)  | 被注释的元素必须在合适的范围内。              |
   
