# extend-spring-boot
**Repository Path**: hxx1318819823/extend-spring-boot
## Basic Information
- **Project Name**: extend-spring-boot
- **Description**: 这是一个对文件存储、 JDK8日期,分布式锁、分布式限流、跨域请求,国际化、防XSS攻击、关键字脱敏的增强包,拥有良好的扩展性,一切功能都是基于注解化驱动
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 17
- **Created**: 2020-05-19
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 简介
`request-spring-boot-starter` 对是一个 `request/response` 的增强包,每个功能都是通过注解形式开启,不会有任何额外的影响开销
比如只想用日期格式化 `@EnableLocalDateTimeFormat` 即可,其它无关的 `Bean` 就不会被初始化,不会造成资源浪费
> 特点
- 使 `spring.jackson.date-format` 属性支持 `JDK8` 日期格式化
- 解决 `request.getInputStream()` 一次读取后失效痛点
- 国际化支持
- 全局跨域支持
- 接口加密/解密
- 防XSS攻击
- 分布式限流/分布式锁支持
# 使用方法
``` xml
com.battcn
request-spring-boot-starter
1.1.1-RELEASE
```
> 注意事项
**如果你想使用 `EnableRedis` 相关组件,你需要额外依赖**
``` xml
org.springframework.boot
spring-boot-starter-data-redis
```
**如果你想使用 `EnableRequestWrapperFilter` 相关组件,你需要额外依赖**
``` xml
commons-io
commons-io
2.6
```
**如果你想使用 `EnableXssFilter` 相关组件,你需要额外依赖**
``` xml
org.apache.commons
commons-text
1.6
```
在主函数(Application.java) 中添加相应注解即可
``` java
import com.battcn.boot.request.annotation.*;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author Levin
*/
@EnableI18n
@EnableCorsFilter
@EnableLocalDateTimeFormat
@EnableRequestWrapperFilter
@EnableRedisLock
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
```
## 存储功能
- 支持 AliYun 云
- 支持 Tencent 云
- 支持 QiNiu 云
- 支持 Minio
```
@Autowired
private StorageOperation storageOperation;
#request.storage.oss.minio.enabled=true
#request.storage.oss.minio.access-key=123
#request.storage.oss.minio.secret-key=123
#request.storage.oss.minio.url=http://localhost:20000
#request.storage.oss.minio.bucket=demo
#request.storage.oss.aliyun.enabled=true
#request.storage.oss.aliyun.access-key=adasd
#request.storage.oss.aliyun.secret-key=adas
#request.storage.oss.qiniu.enabled=true
#request.storage.oss.qiniu.access-key=sad
#request.storage.oss.qiniu.secret-key=asd
#request.storage.oss.qiniu.zone=zone0
#request.storage.oss.tencent.enabled=true
#request.storage.oss.tencent.access-key=adad
#request.storage.oss.tencent.app-id=asdas
#request.storage.oss.tencent.secret-key=asdasd
```
## 注解介绍
> @EnableMybatisPreparePlugin
使用该注解可以有效的为Insert/Update 指令添加全局参数拦截,我们开发中经常要设置一些`createdBy`、`createdTime`、`lastModifiedBy`、`lastModifiedTime` 之类的关键字,很多人喜欢用 `AOP`方式,但是那样不够优雅,而且扩展性也不够强
``` properties
# 首先配置一下我们需要处理的字段(实体类里面的字段名字)
request:
mybatis:
plugin:
superClass: true
insert:
fields:
- createdBy
update:
fields:
- lastModifiedBy
```
**重要:必须实现`PreparePluginContent` 的接口,为你的字段进行赋值操作,直接使用注解会抛出异常信息**
``` java
@Component
public class PreparePluginContentHandler implements PreparePluginContent {
@Override
public Map process() {
Map map = Maps.newHashMap();
map.put("createdBy", SecurityUtils.userId());
map.put("lastModifiedBy", SecurityUtils.userId());
return map;
}
}
```
> @EnableXssFilter
添加对 XSS 攻击转义的支持
> @EnableRedisLimit
添加分布式限流的支持,在启动类上加上该注解即可,然后在请求的接口上面加上`@RedisLimit`
> @EnableRedisLock
添加分布式锁的支持,在启动类上加上该注解即可,然后在请求的接口上面加上`@RedisLock`
> @EnableI18n
`I18N` 国际化支持
> @EnableCorsFilter
全局跨域支持
> EnableRequestWrapperFilter
继承 `HttpServletRequestWrapper` 实现`BodyCacheHttpServletRequestWrapper`,解决 `request.getInputStream()` 一次读取后失效痛点
> EnableLocalDateTimeFormat
使 `spring.jackson.date-format` 属性支持 `JDK8` 日期格式化