# xiaov-util-boot-start
**Repository Path**: xiaovcloud/xiaov-util-boot-start
## Basic Information
- **Project Name**: xiaov-util-boot-start
- **Description**: No description available
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 0
- **Created**: 2021-01-15
- **Last Updated**: 2021-09-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# xiaov-util-boot-start
## 描述
本项目包括本人项目中常用一些公共的组件,无需再添加其他组件的pom或者做任何额外的配置
全部的帮助类均使用静态的方法,方便调用 ,让您的代码更加简洁
`xiaov-util-boot-start`立志打造出一套让你不需要再添加其他工具类的快速开发工具类
> 备注:
> 本项目尚不完整,欢迎有志之士加入
>
>由于开发延时的原因在maven中央仓库的maven坐标并不一定支持所有的功能,您可以选择快照版本的jar,如有需要请在在底部查看配置xiaovmaven的私服
>
>更多请联系xiaov,邮箱:xiaovcloud@xiaov.org
## 使用
### 加入pom依赖
如果您想使用它,请在maven项目的pom文件中加入依赖。
```xml
org.xiaov
xiaov-util-boot-start
1.0-alpha
```
## 介绍
本项目分为两个部分,一个是org.xiaov.core核心包下的普通帮助类,一个是org.xiaov.extra下需要被spring扫描到的组件
## 功能
目前主要的功能:
|工具类|描述|
| ---- | ---- |
|JWTHelper|token验证|
|EmailHelper|发送电子邮件|
|RedisHelper|redis操作|
|HttpCode|常用的状态码|
|R|通用的返回结果集|
|权限拦截器|jwt拦截器,session拦截器|
|TreeHelper|树形结构展示|
## 详细开发文档
### BeanHelper 对象
(等待更新...)
### Date 日期
(等待更新...)
#### DateHelper
(等待更新...)
#### LocalDateHelper
(等待更新...)
### EmailHelper
这个客户端是集成了发邮件的功能,支持qq邮箱,163邮箱等国内主流邮箱。经测试,gmail国内并不支持
您需要开启POP3/IMAP/SMTP等其中的一个服务。 您需要在springboot的配置中您可以加入以下内容,更多详细配置同springboot集成mail。
新的MailHelper内置了默认的端口号等配置,只需要添加host,username,password就可以发送邮件。
```properties
## JavaMailSender Config
spring.mail.host=smtp.mxhichina.com
spring.mail.username=test@xiaov.org
spring.mail.password=test?
#spring.mail.properties.mail.smtp.auth=true
#spring.mail.properties.mail.smtp.starttls.enable=true
#spring.mail.properties.mail.smtp.starttls.required=true
## SSL Config
#spring.mail.port=465
#spring.mail.protocol=smtps
#spring.mail.default-encoding=UTF-8
#spring.mail.properties.mail.smtp.ssl.enable=true
```
EmailHelper支持3中类型的邮件,分别是普通文字邮件,html类型的邮件,模板邮件
```java
package org.xiaov;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.xiaov.bean.mail.MailType;
import org.xiaov.extra.mail.EmailHelper;
import java.util.HashMap;
import java.util.Map;
/**
*
*
*
*
* @author xiaovcloud
* @since 2021/2/26 19:40
*/
@SpringBootTest
public class EmailDemo {
@Test
public void testTextMail() {
String title = "验证码";
String content = "您好啊,我是一封邮件";
String to = "xiaovcloud@xiaov.org";
EmailHelper.sendMail(MailType.TEXT, title, content, to);
}
@Test
public void testHtmlMail() {
String title = "验证码";
String content = "您好啊,我是一封邮件";
String to = "xiaovcloud@xiaov.org";
EmailHelper.sendMail(MailType.HTML, title, content, to);
}
/**
* 当您发送的是需要定制的模板时,我们仍然支持,我们在xiaov-util-boot-start内部加入了thymeleaf模板
* 您只需要传Map类型的map就可以达到定制的效果
* 当然,您需要自己编写模板信息,并存放在springboot项目的resources/templates下
*/
@Test
public void testTemplateMail() {
Map params = new HashMap<>();
params.put("username", "张三");
params.put("password", "1231");
String title = "验证码";
String to = "xiaovcloud@xiaov.org";
EmailHelper.sendMail(MailType.TEMPLATE, title, to, "mail/hello", params);
}
}
```
模板的示例代码如下(templates/mail/hello.html),使用thymeleaf模板语法
```html
| 用户名 |
密码 |
| [[${username}]] |
[[${password}]] |
```
### FileHelper 文件
(等待更新...)
### JWTHelper
现在jwt默认只能配置`expire-time`和`secret-key`两个属性
`expire-time`默认值是60s
```properties
spring.jwt.secret-key=1234567890!@#$%^&*
spring.jwt.expire-time=5 #以秒为单位
spring.jwt.signature=hs256
```
您也可以根据您的业务需求重新定义
```java
package xyz.riceball.jwt;
import io.jsonwebtoken.Claims;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.xiaov.extra.jwt.JWTHelper;
import java.util.HashMap;
/**
*
*
*
*
* @author xiaovcloud
* @since 2021/7/18 17:57
*/
@SpringBootTest
public class JWTTest {
@Test
public void testJWT() {
HashMap map = new HashMap<>();
map.put("id", "1");
map.put("name", "张三");
String token = JWTHelper.buildToken(map);
System.out.println("token-->" + token);
System.out.println("token是否有效:" + JWTHelper.validateToken(token));
Claims fromToken = JWTHelper.parseToken(token);
System.out.println(fromToken.get("name"));
}
}
```
### MapHelper
(等待更新...)
### RedisHelper
默认的设置是访问:localhost:6379 您需要自定义添加redis配置时 ,在application.properties文件中加入以下配置
根据您的配置信息更改内容,更多详细的配置同springboot集成redis
```properties
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=5000
```
```java
package xyz.riceball.redis;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.xiaov.extra.redis.RedisHelper;
/**
*
*
*
*
* @author xiaovcloud
* @since 2021/7/18 17:21
*/
@SpringBootTest
public class RedisTest {
@Test
public void testRedis() throws InterruptedException {
RedisHelper.set("key", "value", 5);
System.out.println(RedisHelper.get("key"));
Thread.sleep(6000);
System.out.println(RedisHelper.get("key"));
}
}
```
### StringHelper
关于一些操作字符串的工具类客户端,可自行了解
### TreeHelper 树形结构开发
只需要在实体类中加入id,pid,List类型的children三个属性,使用convert(List)即可
当然支持定义成其他名字的属性,使用convert(List,String,String,String)的方法
类如:
```java
package xyz.riceball.tree;
import lombok.Data;
import java.util.List;
/**
*
*
*
*
* @author xiaovcloud
* @since 2021/7/18 19:44
*/
@Data
public class Node {
/**
* 实体类id
*/
private long id;
/**
* 父节点id,没有父节点默认为0
*/
private long pid;
/**
* 名字
*/
private String name;
/**
* 作为父节点的子节点集合
*/
private List children;
public Node(long id, long pid, String name) {
this.id = id;
this.pid = pid;
this.name = name;
}
}
```
将查询到的实体添加到List集合中,然后直接查询节点的List集合
```java
package xyz.riceball.tree;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.xiaov.core.collection.ListHelper;
import org.xiaov.core.tree.TreeHelper;
import java.util.List;
/**
*
*
*
*
* @author xiaovcloud
* @since 2021/7/18 19:47
*/
public class TreeTest {
@Test
public void testTree() {
List treeItemList = ListHelper.newArrayList(
new Node(1, 0, "湖北"),
new Node(2, 1, "武汉"),
new Node(3, 1, "荆州"),
new Node(4, 0, "浙江"),
new Node(5, 4, "杭州"),
new Node(6, 5, "西湖区"));
try {
List list = TreeHelper.convert(treeItemList);
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(list));
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
### 拦截器
共有两种拦截器
> - session 拦截器
> - token 拦截器 主要字段为`authorization`
eg: authorization:'XIAOVCLOUD'
推荐您直接使用`WebMvcConfigurer`的实现类
```java
@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthSessionInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login", "/");
}
}
```
## 配置xiaovmaven私服
配置私服后,您可以第一时间拿到最新的jar 您只要在pom文件中加入以下代码,在运行代码的时候就会下载最新的快照版本
```xml
xiaov-maven
xiaov Nexus Repository
http://maven.xiaovcloud.cn/nexus/repository/public/
always
true
```
此时您需要加入的是快照maven坐标,而不是本文开头的maven仓库坐标
```xml
org.xiaov
xiaov-util-boot-start
1.0-alpha
```
## 问题
- ~~redis只访问本地的localhost:3306,不能读取配置文件的远程地址~~
- ~~在web传输的时候,JWTHelper总是超时异常~~
- ~~在发送邮件的时候不抛异常,但是对方不能接收到邮件~~
- ~~将项目改为静态的之后,需要更改示例代码~~
- ~~邮件不能发送多个人,需要扩展能发送至多个人~~
- ~~OSS上传文件~~
- JSONHelper中不能json化对象
- 发送邮件增加附件功能
## 贡献``````
- 收藏 star
- 通过 Issue报告bug或进行咨询。
- 提交 Pull Request 改进`xiaov-util-boot-start`的代码。
- 注意:请在develop分支中发起合并请求,master分支不接受合并
- 在你的公司或个人项目中使用`xiaov-util-boot-start`
## 鸣谢
[奔跑的蜗牛](https://gitee.com/yjh68686)