1、文件工具类

主要功能为文件上传,结合阿里云 OSS 对象存储。上传文件类型包括文档、音频、视频、图片等,可自定义文件夹,文件未加密。自动生成文件名,文件上传成功后返回原文件名、新文件名、文件大小、文件类型、文件链接等信息。

注:文件链接存在有效期,可自行设定。

添加依赖:

        <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3</version></dependency>
public class FileUtil extends cn.hutool.core.io.FileUtil {//阿里云 OSS 对象存储private static final String END_POINT = "http://oss-cn-beijing.aliyuncs.com";   //北京private static final String ACCESS_KEY_ID = "你自己的";   //accessKeyIdprivate static final String ACCESS_KEY_SECRET = "你自己的";   //accessKeySecretprivate static final String BUCKET = "springboot-frame";   //bucketprivate static final String FILE_DIR = "admin/";   //文件保存基路径//文件类型private static final String DOCUMENT = ".doc .docx .pdf .pps .ppt .txt .xls .xlsx";private static final String MUSIC = ".aac .aif .mpa .mp3 .m4a .ra .ram .wav .wma";private static final String IMAGE = ".bmp .cdr .dib .dif .eps .gif .iff .jpeg .jpg .mpt .pcd .pcp .png .psd .tga .tif .wmf";private static final String VIDEO = ".asf .avi .flv .mov .mpe .mpeg .mpg .mp4 .m4v .ogg .ogv .qt .rm .webm .wmv";/*** 上传文件* @param fileBase64 文件的 base64格式* @param fileName 文件名(带后缀)* @return*/public static FileEntity uploadFile(String fileBase64, String fileName) {//创建阿里云客户端对象OSSClient ossClient = new OSSClient(END_POINT,ACCESS_KEY_ID,ACCESS_KEY_SECRET);FileEntity fileEntity = new FileEntity();byte[] fileByte = Base64Utils.decodeFromString(fileBase64);//获取文件后缀int lastIndexOf = fileName.lastIndexOf(".");String fileType = fileName.substring(lastIndexOf);try {//生成文件名String fileNewName = generateFileName(fileType);//将文件从 base64 格式转化成文件,以便获取文件大小等信息FileOutputStream fileOutputStream = new FileOutputStream(System.getProperty("java.io.tmpdir") + File.separator + fileNewName);fileOutputStream.write(fileByte);fileOutputStream.close();//文件输出未知为系统临时缓存目录File file = new File(System.getProperty("java.io.tmpdir") + File.separator + fileNewName);if (file.exists()) {ObjectMetadata objectMetadata = new ObjectMetadata();InputStream inputStream = new ByteArrayInputStream(fileByte);objectMetadata.setContentLength(inputStream.available());//上传文件PutObjectResult putObjectResult = ossClient.putObject(BUCKET,FILE_DIR + getFileDir(fileType) + fileNewName, inputStream, objectMetadata);//判断结果,并将文件信息返回if (StringUtil.isNotEmpty(putObjectResult.getETag())) {fileEntity.setOriginalName(fileName);fileEntity.setFileName(fileNewName);fileEntity.setFileType(getFileType(fileType));fileEntity.setFileSize(file.length() + "");fileEntity.setFilePath(getFileUrl(fileNewName));return fileEntity;} else {return null;}}} catch (Exception e) {e.printStackTrace();}return null;}/*** 判断文件上传位置(阿里云位置)* @param type* @return*/public static String getFileDir(String type) {if (DOCUMENT.contains(type)) {return "documents/";} else if (MUSIC.contains(type)) {return "musics/";} else if (IMAGE.contains(type)) {return "images/";} else if (VIDEO.contains(type)) {return "videos/";} else {return "others/";}}/*** 判断文件类型* @param type* @return*/public static String getFileType(String type) {if (DOCUMENT.contains(type)) {return "文档";} else if (MUSIC.contains(type)) {return "音频";} else if (IMAGE.contains(type)) {return "图片";} else if (VIDEO.contains(type)) {return "视频";} else {return "其它";}}/*** 生成文件名* @param fileType 文件类型* @return*/public static String generateFileName(String fileType) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");String date = simpleDateFormat.format(new Date());String fileName = date + fileType;return fileName;}/*** 根据文件名获取文件路径* @param fileName* @return*/public static String getFileUrl(String fileName) {OSSClient ossClient = new OSSClient(END_POINT,ACCESS_KEY_ID,ACCESS_KEY_SECRET);//链接有效期 9hDate expiration = new Date(new Date().getTime() + 9 * 60 * 60);//获取文件后缀int lastIndexOf = fileName.lastIndexOf(".");String fileType = fileName.substring(lastIndexOf);String url = ossClient.generatePresignedUrl(BUCKET,FILE_DIR + getFileDir(fileType),expiration).toString();return url;}}

测试:在实际应用中在前端将用户需要上传的文件转化成 base64 格式,然后传到后端进行上传。

public static void main(String[] args) {File file = new File("/Users/xinou/Desktop/photos/pc-one-big.jpeg");if (file.exists()) {try {FileInputStream fileInputStream = new FileInputStream(file.getPath());byte[] bytes = new byte[fileInputStream.available()];fileInputStream.read(bytes);fileInputStream.close();String s = Base64Utils.encodeToString(bytes);FileEntity fileEntity = uploadFile(s, file.getName());System.out.println(fileEntity.getOriginalName() + ", " + fileEntity.getFileName() + ", "+ fileEntity.getFileType() + ", " + fileEntity.getFileSize() + ", "+ fileEntity.getFilePath());} catch (Exception e) {e.printStackTrace();}}}

2、短信工具类

主要包括短信验证码部门。结合阿里云和腾讯云。还可有短信群发等功能。

注:阿里云需要的 code 参数的格式为字符串型,腾讯云为数组型。

添加依赖:

        <!--短信验证码--><!--阿里云--><!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.1</version></dependency><!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-dysmsapi --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.1.0</version></dependency><!--腾讯云--><!-- https://mvnrepository.com/artifact/com.github.qcloudsms/qcloudsms --><dependency><groupId>com.github.qcloudsms</groupId><artifactId>qcloudsms</artifactId><version>1.0.6</version></dependency>
public class ShortMsgUtil {private static final String ALI_PRODUCT = "你自己的";   //产品名称private static final String ALI_PRODUCT_URL = "dysmsapig.aliyuncs.com";   //产品域名private static final String ALI_ACCESS_KEY_ID = "你自己的";   //key idprivate static final String ALI_ACCESS_KEY_SECRET = "你自己的";   //key 密钥private static final String ALI_SIGN_NAME = "人世间子";   //短信签名private static final String ALI_TEMPLATE_CODE = "你自己的";   //短信模板private static final Integer TXUN_APP_ID = 你自己的;   //应用 app_idprivate static final String TXUN_APP_KEY = "你自己的";   //应用 app_keyprivate static final String TXUN_SIGN_NAME_ID = "人世间子";   //签名 idprivate static final Integer TXUN_TEMPLATE_ID = 420791;   //模板 idprivate static final Integer PRONHUB = 420843;private static final String TXUN_SMSG_CODE = "86";   //区号/*** 短信验证码(阿里云) 假设用户账号是手机号* @param mobile* @param code* @return 0:发送成功;1:发送失败*/public static Integer sendSMsgCodeALi(String mobile, String code) {Integer result = 1;IClientProfile iClientProfile = DefaultProfile.getProfile("cn-hangzhou", ALI_ACCESS_KEY_ID, ALI_ACCESS_KEY_SECRET);try {DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", ALI_PRODUCT, ALI_PRODUCT_URL);IAcsClient iAcsClient = new DefaultAcsClient(iClientProfile);SendSmsRequest request = new SendSmsRequest();request.setPhoneNumbers(mobile);request.setSignName(ALI_SIGN_NAME);request.setTemplateCode(ALI_TEMPLATE_CODE);request.setTemplateParam("\"code\":\"" + code + "\"}");SendSmsResponse response = iAcsClient.getAcsResponse(request);if (response.getCode() != null && "OK".equals(response.getCode())) {result = 0;} else {result = 1;}} catch(ClientException e) {e.printStackTrace();}return result;}/*** 短信验证码(腾讯云) 假设用户账号为手机号* @param mobile* @param code* @return 0:发送成功;1:发送失败*/public static Integer sendSMsgCodeTXun(String mobile, String[] code) {Integer result = 1;try {SmsSingleSender smsSingleSender = new SmsSingleSender(TXUN_APP_ID, TXUN_APP_KEY);SmsSingleSenderResult smsSingleSenderResult = smsSingleSender.sendWithParam(TXUN_SMSG_CODE,mobile, TXUN_TEMPLATE_ID, code, TXUN_SIGN_NAME_ID, "", "");result = smsSingleSenderResult.result;} catch (Exception e) {e.printStackTrace();}return result;}}

3、邮件工具类

邮件工具类包括邮箱验证码和邮箱激活链接。结合 163 邮箱。

添加依赖:

        <!--发送邮件--><!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency>
public class EmailUtil {private static final String FROM = "香格里拉集团";   //发送方昵称;private static final String FROM_ACCOUNT = "youremail@163.com";   //发送方账号private static final String GRAN_CODE = "你自己的";   //授权码private static final String URL = "http://localhost:8081/api/admin/user/activate";   //激活链接地址 激活地址为自己项目中的 api/*** 邮件激活 假设用户账号是邮箱* @param userId* @param userName*/public static void sendActivateLik(Integer userId, String userName) {Session session = getSession();MimeMessage message = new MimeMessage(session);try {String content = "<p>您好!</p>"+ "<p>&nbsp;&nbsp;&nbsp;&nbsp;欢迎加入香格里拉集团,请点击此链接激活账号!</p>"+ "<p>&nbsp;&nbsp;&nbsp;&nbsp;<a target='_BLANK' href='" + URL + "?=" + userId + "'>"+ URL + "?id=" + userId + "</a></p>";message.setSubject("香格里拉集团 | 账号激活");   //邮件主题message.setSentDate(new Date());message.setFrom(new InternetAddress(FROM_ACCOUNT, FROM, "UTF-8"));message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(userName));message.setContent(content, "text/html;charset=gb2312");Transport.send(message);} catch (MessagingException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}}/*** 邮件验证码 假设用户账号是邮箱* @param userName* @param code*/public static void sendEmailCode(String userName, String code) {Session session = getSession();MimeMessage message = new MimeMessage(session);try {String content = "<p>您好!</p>"+ "<p>&nbsp;&nbsp;&nbsp;&nbsp;欢迎加入香格里拉集团,您的验证码为:</p>"+ "<p>&nbsp;&nbsp;&nbsp;&nbsp;" + code + "</p>";message.setSubject("香格里拉集团 | 验证码");   //邮件主题message.setSentDate(new Date());message.setFrom(new InternetAddress(FROM_ACCOUNT, FROM, "UTF-8"));message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(userName));message.setContent(content, "text/html;charset=gb2312");Transport.send(message);} catch (MessagingException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}}/*** 邮件配置* @return*/public static Session getSession() {Properties properties = new Properties();properties.setProperty("mail.transport.protocol", "smtp");   //指定发送邮件的邮箱协议properties.setProperty("mail.smtp.host", "smtp.163.com");   //指定smtp服务器properties.setProperty("mail.smtp.port", "25");   //端口号:25properties.setProperty("mail.smtp.auth", "true");   //指定是否需要smtp验证Session session = Session.getInstance(properties, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(FROM_ACCOUNT, GRAN_CODE);}});return session;}}

4、token 工具类

token 工具类中包括生成 token 和验证 token 。

添加依赖:

        <!--JWT token相关--><!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api 编译环境 --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.10.5</version></dependency><!--运行环境--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.10.5</version><scope>runtime</scope></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.10.5</version><scope>runtime</scope></dependency>
public class TokenUtil {//token有效时间 两小时public static final long EXPIRE_TIME = 7200000;//签名密钥private static final String TOKEN_SECRET = "你自己的";   //秘钥可在网上在线生成,也可自己写方法生成//JWT有效private static final Integer JWT_BE_BOT_OVERDUE_CODE = 1001;//JWT过期-无效private static final Integer JWT_BE_OVERDUE_CODE = 1002;/*** 生成JWS      JWT签名后称为JWS* @param subject 用户id 即生成的JWS的唯一所有人* @return*/public static String createJWS(String subject) {SecretKeySpec key = new SecretKeySpec(TOKEN_SECRET.getBytes(), "HmacSHA256");   //签名密钥long createTime = System.currentTimeMillis();   //JWT生成时间Date createDate = new Date(createTime);long expireTime = createTime + EXPIRE_TIME;   //JWT有效时间Date expireDate = new Date(expireTime);JwtBuilder builder = Jwts.builder();   //new 一个JwtBuilder来设置JWT的bodybuilder.setId(getUUID())   //设置jti(JWT ID):是JWT的唯一标识,主要用来作为一次性token,从而回避重放攻击.signWith(key)   //指定密钥.setIssuedAt(createDate)   //JWT签发时间.setSubject(subject)   //JWT的主体,即所有人,一般为userId等.setExpiration(expireDate);   //失效时间return builder.compact();   //开始压缩}/*** 验证JWS*      验证JWT时的签名密钥跟生成时的签名密钥相同,且生成将其存入数据库,*      所以验证时如果抛出异常,只能是过期* @param jwsString* @return 1001:有效;1002:无效-过期*/public static Integer checkJWS(String jwsString) {SecretKeySpec key = new SecretKeySpec(TOKEN_SECRET.getBytes(), "HmacSHA256");   //签名密钥try {Jwts.parser().setSigningKey(key).parseClaimsJws(jwsString);} catch (JwtException e) {return JWT_BE_OVERDUE_CODE;}return JWT_BE_BOT_OVERDUE_CODE;}/*** 生成唯一标识* @return*/private final static String getUUID() {return UUID.randomUUID().toString().replaceAll("-", "");}}

springboot 中的 文件、短信、邮件、token 工具类相关推荐

  1. ThinkPHP6集成腾讯云、短信宝短信发送的工具类

    composer安装 composer require mrwanghongda/sms-sdk 代码: use Mrwanghongda\SmsSdk\Sms\SmsFactory;/*** 短信宝 ...

  2. 调用阿里云发送短信验证码的工具类

    /*** @Description 阿里云短信发送工具类* @Author 曰业而安*/ public class SendSmsUtil { //phone 手机号 //param 验证码 注意这里 ...

  3. C#中对文件File常用操作方法的工具类

    场景 C#中File类的常用读取与写入文件方法的使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99693983 注: 博客 ...

  4. 短信验证码生成工具类

    public class ImageCodeUtil { /** * 验证码难度级别 Simple-数字 Medium-数字和小写字母 Hard-数字和大小写字母 / public enum Secu ...

  5. 基于阿里云的短信接口的工具类及三个jar包下载地址

    https://blog.csdn.net/Mr_zzr/article/details/100168118 上面这个写的很好! 三个jar包下载地址在我的github: https://github ...

  6. SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)

    前言 网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的 所以,基于这一点. 该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程 ...

  7. SpringBoot OAuth2.0 使用短信验证码登录授权

    SpringBoot OAuth2.0 使用短信验证码登录授权 实现步骤: 自定义授权器,继承 AbstractTokenGranter 类: 重写 getOAuth2Authentication 函 ...

  8. 短信验证码+token唯一机制+防止重刷+幂等性

    点击阅读认证服务 阿里云服务 下面截图为阿里云提供的 发送手机短信验证码的服务代码 将蓝色标记变成可配置的 怎么做?? 一个文件要是想可配置 就是从配置文件中取 首先当前的函数要和配置文件关联上 你要 ...

  9. SpringBoot集成阿里云短信服务

    SpringBoot集成阿里云短信服务 1.准备工作 2.项目集成 2.1 添加依赖 2.2 配置文件 2.3 业务逻辑实现 在实际项目中经常有发送短信的功能,今天进说一下对接阿里云短信服务实现短信发 ...

最新文章

  1. Jquery各版本下载,附Jquery官网下载方法
  2. MongoDB(4.0)分片——大数据的处理之道
  3. 计算机cad论文参考文献,Auto CAD在计算机绘制矿图中的应用探索
  4. eclipse运行时出现Unable to execute dex
  5. openstack——horizon篇
  6. 双linux grub rescue,Grub Rescue修复方法
  7. variant php,Variant 是什么数据类型?
  8. mupdf-android-viewer 设计与实现浅析
  9. MUI 里js动态添加数字输入框后,增加、减少按钮无效
  10. showModalDialog页面
  11. lambda表达式对比
  12. 《迷宫》之站立会议—5.16
  13. H.264 无参考视频质量评价方法 (使用了基于遗传编程方法的符号回归)
  14. 如何将PDF转换成Word
  15. 【MODBUS】组态王通过串口与MODBUS RTU设备通讯
  16. 威佐夫博弈(C语言)
  17. 在网页中加入透明flash代码
  18. hdu 4517 小小明系列故事——游戏的烦恼(统计类题目)
  19. C#编写的通过汉字得到拼音和五笔码
  20. 英文数字验证码识别包

热门文章

  1. 关于计算机算法的ppt,中科院计算机算法分析与设计_习题3-4_答案.ppt
  2. 算法开发:将合并后的模型编译成动态库(so文件)提供给qt调用
  3. 智商黑洞(门萨Mensa测试)11
  4. day69 【哈希,HashSet,HashMap】
  5. office使用技巧大全
  6. JAVA java学习(9)——————java常用开发工具介绍
  7. UC 浏览器曝中间人攻击漏洞,官方:已修复,国内版不受影响
  8. 40G/100G万兆交换机如何选择?
  9. swing可视化编程-使用label添加图片
  10. mysql outer join的用法_MySQL 8 中的连接语法JOIN、OUTER JOIN的相关用法