苍穹外卖小记-第三方工具类

oss对象存储

在学到这块时,很多弹幕都说为什么要额外添加如下代码

package com.sky.config;

import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类,用于创建AliOssUtil对象
 */
@Configuration
@Slf4j
        public class OssConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){
        log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);
        return new AliOssUtil(aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName());
    }
}

目的,将属性和方法都写好,生成bean类交给容器管理,这时候开发者只需要调用Util中的方法就行,便于开发者使用。

疑虑:

为什么之前的jwt工具类不这样呢?

 于是我参考了之前jwt代码,并改写成上面格式,发现jwt为什么不按照上面方法写:

首先在JwtProperties中属性有两种,管理端和客户端,

/**
* 管理端员工生成jwt令牌相关配置
*/
private String adminSecretKey;
private long adminTtl;
private String adminTokenName;

/**
* 用户端微信用户生成jwt令牌相关配置
*/
private String userSecretKey;
private long userTtl;
private String userTokenName;

然后他们使用同一个方法进行生成jwt


public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
// 指定签名的时候使用的签名算法,也就是header那部分
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

// 生成JWT的时间
long expMillis = System.currentTimeMillis() + ttlMillis;
Date exp = new Date(expMillis);

// 设置jwt的body
JwtBuilder builder = Jwts.builder()
// 如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的
.setClaims(claims)
// 设置签名使用的签名算法和签名使用的秘钥
.signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))
// 设置过期时间
.setExpiration(exp);

return builder.compact();
}

假设我们将所有属性和,方法放在一起封装成bean类,如下:

JWT工具类

package com.sky.config;

import com.sky.properties.JwtProperties;
import com.sky.utils.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类,直接将jwtUtil工具类交给容器管理
 */
@Configuration
@Slf4j
public class JwtConfiguration {
    @Bean
    @ConditionalOnMissingBean//如果Bean容器内没有该对象,就会将该返回的对象添加到容器中,否则不加入
    public JwtUtil jwtUtil(JwtProperties jwtProperties){
        log.info("开始创建jwt对象: {}",jwtProperties);
        return new JwtUtil(jwtProperties.getAdminSecretKey(),
                jwtProperties.getAdminTtl(),
                jwtProperties.getAdminTokenName(),
                jwtProperties.getUserSecretKey(),
                jwtProperties.getUserTtl(),
                jwtProperties.getUserTokenName());
    }
}

那么我在使用时,只需调用方法即可,但是问题来了,我有电脑端和手机端,那你得提供我两个方法,但是呢生成jwt代码逻辑一样的,所以为了减少代码量,我们提供一个通用的方法,在方法中通过你传递的参数去执行。

总结:

oss之所以需要增加一个配置类,因为开发者不需要使用到配置属性,所以统一封装简便开发者使用。

jwt:因为在使用jwt中需要使用配置属性,所以不将属性和方法杂糅在一起。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值