@ConditionalOnProperty控制钉钉扫码登录逻辑

简介: 云巧4A组件应用于某项目,而该项目采购的是浙政钉,因此在4A组件需要实现浙政钉扫码登录。该功能与4A组件中的公版钉扫码登录逻辑类似,可以直接复用接口,而且由于同一个项目中公版钉和专有钉不会出现同时存在的情况,因此可以通过配置参数来决定在不同项目中使用哪种逻辑。

1. 业务背景

云巧4A组件应用于某项目,而该项目采购的是浙政钉,因此在4A组件需要实现浙政钉扫码登录。该功能与4A组件中的公版钉扫码登录逻辑类似,可以直接复用接口,而且由于同一个项目中公版钉和专有钉不会出现同时存在的情况,因此可以通过配置参数来决定在不同项目中使用哪种逻辑。

2. @ConditionalOnProperty的作用

在Spring Boot的自动配置中经常看到@ConditionalOnProperty注解的使用,这个注解就是控制在指定的条件下,是否需要加载这个bean。

3. @ConditionalOnProperty属性说明

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented@Conditional(OnPropertyCondition.class)
public@interfaceConditionalOnProperty {
// 数组,获取对应property名称的值,与name不可同时使用String[] value() default {};
// 配置属性名称的前缀,比如spring.httpStringprefix() default"";
// 数组,配置属性完整名称或部分名称// 可与prefix组合使用,组成完整的配置属性名称,与value不可同时使用String[] name() default {};
// 获取配置文件中key为name属性的值,比较该值与havingValue给定的值是否相同,相同才加载配置StringhavingValue() default"";
// 如果为true,没有该配置属性时也会正常加载;反之则不会生效,表示配置文件中如果没有name属性配置的keybooleanmatchIfMissing() defaultfalse;

4. @ConditionalOnProperty使用范围

@Target({ ElementType.TYPE, ElementType.METHOD })

注解的@Target属性值为TYPE、METHOD,就表示当前注解在类和方法上都可以使用。

5. @ConditionalOnProperty使用方式

直接在@Configuration、@Bean上同级进行使用,如果满足条件就表示可以加载该类,如果不满足条件就不加载这个bean到Spring容器中。

在配置文件中配置yunqiao.dingtalk.env参数

yunqiao.dingtalk.env: ${DINGTALK_ENV:private} #配置走公有钉或专有钉逻辑

在共有钉逻辑中设置@ConditionalOnProperty的havingValue = "public"

@Component@ConditionalOnProperty(value="yunqiao.dingtalk.env", havingValue="public")
publicclassDingTalkLoginServiceImplimplementsDingTalkLoginService {
    ...
}

在私有钉逻辑中设置@ConditionalOnProperty的havingValue = "private"

@Component@ConditionalOnProperty(value="yunqiao.dingtalk.env", havingValue="private")
publicclassPrivateDingTalkLoginServiceImplimplementsDingTalkLoginService {
    ...
}

如果在配置中设置为共有钉逻辑public,则走DingTalkLoginServiceImpl方法,若在配置中设置为私有钉逻辑private,则走PrivateDingTalkLoginServiceImpl方法。

6. @Conditional相关注解

Spring Boot 对 @Conditional 注解为我们做了细化,这些注解都定义在 org.springframework.boot.autoconfigure.condition package 下

image.png

我们发现这些注解上有相同的元注解:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented@Conditional({OnPropertyCondition.class})

从这些标记上我们可以了解如下内容:

相关注解介绍如下:

7. 总结

我们可以通过@ConditionalOnProperty等注解控制不同条件下走哪条逻辑,从而在指定的条件下,灵活的配置是否需要加载某些配置,将配置和硬编码进行解耦,提高灵活性和扩展性。

相关文章
|
5月前
|
Java
钉钉第三方扫码登录提示 code: 403, 没有调用该接口的权限,接口权限申请参考
钉钉第三方扫码登录提示 code: 403, 没有调用该接口的权限,接口权限申请参考 ,但是我明明申请了Contact.User.Read 这个权限
197 1
|
前端开发 开发者 容器
Web站,前端接入钉钉扫码登录!
Web站,前端接入钉钉扫码登录!
|
4天前
|
运维 IDE Java
云效产品使用报错问题之使用钉钉扫码登录云效,出现“因机型不匹配建议更换”如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
4天前
|
安全
钉钉扫码登录不跳转的情况,可能有以下几种原因:
钉钉扫码登录不跳转的情况,可能有以下几种原因:
362 3
|
Java 开发工具 开发者
基于springboot架构 钉钉扫码登录第三方应用
• 获取appId及appSecret • 项目应用 • 1.配置文件增加如下配置 • 2.下载sdk • 3.将sdk引入项目 • 3.修改登录跳转方法/login • 4.登录页修改 • 5.扫码重定向实现登录的方法如下 • 6.重写UsernamePasswordToken
基于springboot架构 钉钉扫码登录第三方应用
|
Java
钉钉第三方网站扫码登录及钉钉工作台自动免登操作
钉钉扫码免登以及应用自动登录?
2101 0
钉钉第三方网站扫码登录及钉钉工作台自动免登操作
|
存储 弹性计算 安全
成功案例-钉钉 | 学习笔记
快速学习 成功案例-钉钉
298 0
|
存储 弹性计算 安全
案例分享——钉钉|学习笔记
快速学习 案例分享——钉钉
279 0
|
移动开发 物联网 Go
SAP Business ByDesign 和支付宝与钉钉集成的一个原型开发案例
SAP Business ByDesign 和支付宝与钉钉集成的一个原型开发案例
SAP Business ByDesign 和支付宝与钉钉集成的一个原型开发案例

热门文章

最新文章