Spring Boot 整合 LDAP 开发教程

目录

  • Spring Boot 整合 LDAP 开发教程
    • 简介
    • LDAP 名词解释
    • 配置依赖
    • 连接
    • 查询
    • 总结
    • REFRENCES
    • 微信公众号

简介

LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP 之上的访问协议—LDAP。

LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中表的记录;条目是具有区别名DN (Distinguished Name)的属性(Attribute),DN是用来引用条目的,DN相当于关系数据库表中的关键字(Primary Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。类型的一个例子就是mail,其值将是一个电子邮件地址。

LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织 (organization)(o=Acme)或组织单元(organizational units) (ou=People)。一个组织单元可能包含诸如所有雇员、大楼内的所有打印机等信息。此外,LDAP支持对条目能够和必须支持哪些属性进行控制,这是有一个特殊的称为对象类别(objectClass)的属性来实现的。该属性的值决定了该条目必须遵循的一些规则,其规定了该条目能够及至少应该包含哪些属性。例如:inetorgPerson对象类需要支持sn(surname)和cn(common name)属性,但也可以包含可选的如邮件,电话号码等属性。

LDAP 名词解释

o– organization(组织-公司)
ou – organization unit(组织单元-部门)
c - countryName(国家)
dc - domainComponent(域名)
sn – suer name(真实名称)
cn - common name(常用名称

配置依赖

compile 'org.springframework.boot:spring-boot-starter-data-ldap'

备注

spring-boot-starter-data-ldapSpring Boot封装的对LDAP自动化配置的实现,它是基于spring-data-ldap来对LDAP服务端进行具体操作的。

连接

  • application.yml
# LDAP连接配置
spring:ldap:urls: ldap://10.33.47.7:7003base: dc=platform,dc=xxxx,dc=comusername: ou=acs,ou=componentaccounts,dc=platform,dc=xxxx,dc=compassword: UlAwRkYl

查询

  • Person.java

    Person中字段为需要从Ldap中查询的数据字段,利用注解@Attribute(name=“xx”)进行注解,Entry中定义的objectClass和base为Ldap中数据资源的定位信息。查询的时候可以作为返回对象来接收数据。

/** @ProjectName: 编程学习* @Copyright:   2018 HangZhou Yiyuery Dev, Ltd. All Right Reserved.* @address:     http://xiazhaoyang.tech* @date:        2018/7/28 18:15* @email:       xiazhaoyang@live.com* @description: 本内容仅限于编程技术学习使用,转发请注明出处.*/
package com.example.chapter3.spring.components.ldap;import lombok.Data;
import lombok.ToString;
import org.springframework.ldap.odm.annotations.Attribute;
import org.springframework.ldap.odm.annotations.Entry;import java.util.Date;/*** <p>** </p>** @author xiachaoyang* @version V1.0* @date 2018年10月08日 17:16* @modificationHistory=========================逻辑或功能性重大变更记录* @modify By: {修改人} 2018年10月08日* @modify reason: {方法名}:{原因}* ...*/
@Data
@ToString
@Entry(objectClasses = {"bicPersonExt", "bicPerson"}, base = "ou=person,dc=coreservice")
public class Person {/*** 主键*/@Attributeprivate String personId;/*** 人员姓名*/@Attribute(name = "cn")private String personName;/*** 组织ID*/@Attribute(name = "orgId")private String orgId;/*** 性别*/@Attribute(name = "sex")private Integer sex;/*** 电话*/@Attribute(name = "mobile")private String mobile;/*** 邮箱*/@Attribute(name = "email")private String email;/*** 工号*/@Attribute(name = "jobNo")private String jobNo;/*** 学号*/@Attribute(name = "studentId")private String studentId;/*** 证件类型*/@Attribute(name = "certType")private Integer certType;/*** 证件号码*/@Attribute(name = "certificateNo")private String certNo;@Attributeprotected Date createTime;/*** 更新时间*/@Attributeprotected Date updateTime;/*** 状态*/@Attributeprotected Integer status;@Attributeprotected Integer disOrder;/*** 工作单位*/@Attributeprivate String company;
}
  • IPersonRepo.java

    查询方法的接口层定义(Dao)

package com.example.chapter3.spring.components.ldap;import org.springframework.ldap.core.LdapTemplate;import java.util.List;/*** <p>** </p>** @author xiachaoyang* @version V1.0* @date 2018年10月08日 15:24* @modificationHistory=========================逻辑或功能性重大变更记录* @modify By: {修改人} 2018年10月08日* @modify reason: {方法名}:{原因}* ...*/
public interface IPersonRepo {void setLdapTemplate(LdapTemplate ldapTemplate);List<String> getAllPersonNames();List<String> getAllPersonNamesWithTraditionalWay();List<Person> getAllPersons();Person findPersonWithDn(String dn);List<String> getPersonNamesByOrgId(String orgId);
}
  • PersonRepoImpl.java

    Dao接口实现层

/** @ProjectName: 编程学习* @Copyright:   2018 HangZhou Yiyuery Dev, Ltd. All Right Reserved.* @address:     http://xiazhaoyang.tech* @date:        2018/7/28 18:15* @email:       xiazhaoyang@live.com* @description: 本内容仅限于编程技术学习使用,转发请注明出处.*/
package com.example.chapter3.spring.components.ldap;import org.springframework.ldap.core.AttributesMapper;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.query.LdapQuery;import javax.naming.Context;
import javax.naming.NameNotFoundException;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.*;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;import static org.springframework.ldap.query.LdapQueryBuilder.query;/*** <p>** </p>** @author xiachaoyang* @version V1.0* @date 2018年10月08日 15:24* @modificationHistory=========================逻辑或功能性重大变更记录* @modify By: {修改人} 2018年10月08日* @modify reason: {方法名}:{原因}* ...*/
public class PersonRepoImpl implements IPersonRepo {private LdapTemplate ldapTemplate;@Overridepublic void setLdapTemplate(LdapTemplate ldapTemplate) {this.ldapTemplate = ldapTemplate;}/*** 查询部分字段集合* @return*/@Overridepublic List<String> getAllPersonNames() {return ldapTemplate.search(query().where("objectclass").is("person"), (AttributesMapper<String>) attrs -> (String) attrs.get("cn").get());}/*** 传统LDAP查询方式* @return*/@Overridepublic List<String> getAllPersonNamesWithTraditionalWay() {Hashtable env = new Hashtable();env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");env.put(Context.PROVIDER_URL, "ldap://10.33.47.7:7003/dc=platform,dc=xxx,dc=com");env.put(Context.SECURITY_PRINCIPAL, "ou=acs,ou=componentaccounts,dc=platform,dc=xxx,dc=com");env.put(Context.SECURITY_CREDENTIALS, "UlAwRkYl");DirContext ctx;try {ctx = new InitialDirContext(env);} catch (NamingException e) {throw new RuntimeException(e);}List<String> list = new LinkedList<String>();NamingEnumeration results = null;try {SearchControls controls = new SearchControls();controls.setSearchScope(SearchControls.SUBTREE_SCOPE);results = ctx.search("", "(objectclass=person)", controls);while (results.hasMore()) {SearchResult searchResult = (SearchResult) results.next();Attributes attributes = searchResult.getAttributes();Attribute attr = attributes.get("cn");String cn = attr.get().toString();list.add(cn);}} catch (NameNotFoundException e) {// The base context was not found.// Just clean up and exit.} catch (NamingException e) {//throw new RuntimeException(e);} finally {if (results != null) {try {results.close();} catch (Exception e) {// Never mind this.}}if (ctx != null) {try {ctx.close();} catch (Exception e) {// Never mind this.}}}return list;}/*** 查询对象映射集合* @return*/@Overridepublic List<Person> getAllPersons() {return ldapTemplate.search(query().where("objectclass").is("person"), new PersonAttributesMapper());}/*** 根据DN查询指定人员信息* @param dn* @return*/@Overridepublic Person findPersonWithDn(String dn) {return ldapTemplate.lookup(dn, new PersonAttributesMapper());}/*** 组装查询语句* @param orgId* @return*/@Overridepublic  List<String> getPersonNamesByOrgId(String orgId) {LdapQuery query = query().base("ou=person,dc=coreservice").attributes("cn", "sn").where("objectclass").is("person").and("orgId").is(orgId);return ldapTemplate.search(query,(AttributesMapper<String>) attrs -> (String) attrs.get("cn").get());}}
  • PersonAttributesMapper

    查询辅助对象

/** @ProjectName: 编程学习* @Copyright:   2018 HangZhou Yiyuery Dev, Ltd. All Right Reserved.* @address:     http://xiazhaoyang.tech* @date:        2018/7/28 18:15* @email:       xiazhaoyang@live.com* @description: 本内容仅限于编程技术学习使用,转发请注明出处.*/
package com.example.chapter3.spring.components.ldap;import org.springframework.ldap.core.AttributesMapper;import javax.naming.NamingException;
import javax.naming.directory.Attributes;/*** <p>** </p>** @author xiachaoyang* @version V1.0* @date 2018年10月08日 17:17* @modificationHistory=========================逻辑或功能性重大变更记录* @modify By: {修改人} 2018年10月08日* @modify reason: {方法名}:{原因}* ...*/
public class PersonAttributesMapper implements AttributesMapper<Person> {/*** Map Attributes to an object. The supplied attributes are the attributes* from a single SearchResult.** @param attrs attributes from a SearchResult.* @return an object built from the attributes.* @throws NamingException if any error occurs mapping the attributes*/@Overridepublic Person mapFromAttributes(Attributes attrs) throws NamingException {Person person = new Person();person.setPersonName((String)attrs.get("cn").get());person.setOrgId((String)attrs.get("orgId").get());return person;}
}
  • LdapTest.java 测试用例
/** @ProjectName: 编程学习* @Copyright:   2018 HangZhou Yiyuery Dev, Ltd. All Right Reserved.* @address:     http://xiazhaoyang.tech* @date:        2018/7/28 18:15* @email:       xiazhaoyang@live.com* @description: 本内容仅限于编程技术学习使用,转发请注明出处.*/
package com.example.chapter3.spring.components;import com.example.chapter3.Chapter3ApplicationTest;
import com.example.chapter3.spring.components.ldap.Person;
import com.example.chapter3.spring.components.ldap.PersonRepoImpl;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;/*** <p>** </p>** @author xiachaoyang* @version V1.0* @date 2018年10月08日 11:47* @modificationHistory=========================逻辑或功能性重大变更记录* @modify By: {修改人} 2018年10月08日* @modify reason: {方法名}:{原因}* ...*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes={Chapter3ApplicationTest.class})
public class LdapTest {@Autowiredprivate LdapTemplate ldapTemplate;private  PersonRepoImpl personRepo;@Beforepublic void init(){personRepo = new PersonRepoImpl();personRepo.setLdapTemplate(ldapTemplate);}@Testpublic void ldapRestTestPart1(){// 查询所有人员名称//personRepo.getAllPersonNames().forEach(p-> System.out.println(p));//荣禧//荣耀//feng_p1//fengzi_0917_1//....// 查询所有人员集合(指定字段映射)//personRepo.getAllPersons().forEach(p-> System.out.println(p.toString()));//Person(personId=null, personName=fengzi_0917_7, orgId=14ed2744-fbd4-4868-8ebc-6b0b94d5ae60, sex=null, mobile=null, email=null, jobNo=null, studentId=null, certType=null, certNo=null, createTime=null, updateTime=null, status=null, disOrder=null, company=null)//Person(personId=null, personName=fengzi_0917_104, orgId=14ed2744-fbd4-4868-8ebc-6b0b94d5ae60, sex=null, mobile=null, email=null, jobNo=null, studentId=null, certType=null, certNo=null, createTime=null, updateTime=null, status=null, disOrder=null, company=null)//根据dn查询System.out.println(personRepo.findPersonWithDn("ou=person,dc=coreservice,dc=platform,dc=xxx,dc=com").toString());//根据组织ID查询人员//personRepo.getPersonNamesByOrgId("14ed2744-fbd4-4868-8ebc-6b0b94d5ae60").forEach(System.out::println);//feng_0925_4687//feng_0925_4693//...//传统查询方式//personRepo.getAllPersonNamesWithTraditionalWay().forEach(System.out::println);//荣禧//荣福//feng_p1//fengzi_0917_1//....}
}

总结

  1. LDAP作为轻量级目录查询,利用dn的查询效率十分高
  2. LDAP十分适合管理带有树结构的数据
  3. LDAP的数据模型(目录设计)十分重要,关乎到数据冗余大小、查询效率等问题。
  4. LDAP分页查询需要针对结果循环处理,查询效率一般。

实际项目开发中LDAP建议只是作为数据同步中心,因为其对于大数据量的查询效率并不是很高,尤其是数据表变动比较频繁的情况,LDAP中指定大量条件进行模糊搜索时,效率很低。

通过定时同步任务来对LDAP的数据和本地数据库进行同步,然后本地直接操作数据库表格进行查询、分页,此法对LDAP的依赖性降低。

REFRENCES

  1. LDAP快速入门
  2. Spring LDAP Refrences Document

微信公众号

扫码关注或搜索架构探险之道获取最新文章,不积跬步无以至千里,坚持每周一更,坚持技术分享_

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Linux_LVM&Quota

    目录目录 磁盘分区RHEL6 磁盘管理指令mount fdisk lvm LVM图形化 quota quota指令磁盘分区RHEL6磁盘管理指令cfdisk -l 查询分区状况 df -Th 显示简易分区信息表 blkid 显示分区UUID 和分区类型mountmount 挂载指令,将磁盘分区挂载到目录上,通过访问目录进入到磁盘分区中…...

    2024/4/28 11:11:06
  2. 开源ERP OpenERP7开发教程相关资料

    OpenERP 7.0版本发布: http://shine-it.net/index.php/topic,5807.msg14435.html#msg14435 对不起SAP,我要终结你!--OpenERP 7.0发布之前: http://www.openerpchina.org/forum.php?mod=viewthread&tid=300 OpenERP进入中国大学课堂: http://shine-it.net/index.php/top…...

    2024/4/28 4:36:15
  3. reactjs 视频教程

    最近玩了一下react,感觉挺不错的,搜了一下没有看到什么视频教程,于是自己便录制了几个入门视频,希望可以帮到大家,已经上传土豆了,可以点击下面的链接查看。http://www.tudou.com/listplay/p11F8hRUnjI/vhak2xWae2I.html...

    2024/4/28 1:38:02
  4. LDAP概念性小结

    一. LDAP介绍 1. LDAP能做什么 大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此,当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化,大多数的LDAP目录服务器并不适合存储需要需要经常改变…...

    2024/4/27 23:26:16
  5. Linux_LVM/Quota

    目录目录 Disk Quota How to enable the disk quota Partition Disk Create LVM LVM Extend LVM ReduceDisk QuotaCharacteristic: 1. For specialty user 2. Limit user and baseGroup 3. Limit of DiskSize(Volume), limit of fileCount.How to enable the disk quotaste…...

    2024/4/28 1:10:02
  6. transformer模型

    转自:https://www.bilibili.com/video/BV1Mt411J734 https://github.com/aespresso/a_journey_into_math_of_ml说到自然语言处理, 语言模型, 命名实体识别, 机器翻译, 可能很多人想到的LSTM等循环神经网络, 但目前其实LSTM起码在自然语言处理领域已经过时了, 在Stanford阅读理…...

    2024/4/28 16:42:48
  7. 开源ERP OpenERP7 开发教程相关资料

    OpenERP 7.0版本发布: http://shine-it.net/index.php/topic,5807.msg14435.html#msg14435对不起SAP,我要终结你!--OpenERP 7.0发布之前: http://www.openerpchina.org/forum.php?mod=viewthread&tid=300OpenERP进入中国大学课堂: http://shine-it.net/index.php/topic…...

    2024/4/28 3:14:20
  8. Android 控件模糊案例

    blurkit-android项目地址:wonderkiln/blurkit-android简介:The missing Android blurring library. Fast blur-behind layout that parallels iOS.BlurKit is an extraordinarily easy to use utility to get live blurring just like on iOS. Built by Dylan McIntyre.BlurK…...

    2024/4/28 21:30:02
  9. reactjs视频教程

    reactjs视频教程需要的可以关注微信公众号搜索:cityapes或者搜索:城市一猿 点击菜单的vue.js就可以下载了...

    2024/4/28 5:02:12
  10. Linux下提示命令找不到:bash:command not found

    Linux下输入某些命令时会提示:bash:command not found。情况一:首先,查看$PATH中是否包含了这些命令。$PATH:决定了shell到哪些目录中去寻找命令或程序,PATH值是一系列的目录。当运行程序时,linux到这些目录下搜索进行编译链接。格式:PATH = $PATH:<PATH1>:<PA…...

    2024/4/28 14:42:56
  11. 装配式工程师:目前火热的“装配式建筑”你了解多少?

    装配式建筑一般指在工厂中预制的模块构件在施工现场以组装化技术组装而成的各种建筑。一般以房间作为模块单元,在工厂中进行预制生产,并可在工厂对模块内部空间进行布置与装修,完成后运输至现场通过可靠的连接方式组装成建筑整体。运用这样的建造方式,能使得一些原本需要大…...

    2024/4/28 8:49:45
  12. ReactJs学习之生命周期及事件

    玩了几个月的mui和h builder开发,整体上感觉在开发效率上提高了些,但是在体验上确实不敢恭维,对于一个做原生开发的程序猿来说,指望设备在webview方面有质的提升来提高app的用户体验太被动了。当然,h5+原生才是app的生存之道–也就是大前端嘛。项目前端框架主要用的是mui+…...

    2024/4/27 22:25:10
  13. 开源ERP — Compiere(全球开源排名第一)

    2019独角兽企业重金招聘Python工程师标准>>> 开源ERP — Compiere(全球开源排名第一) 开源ERP — Zoapiere(基于Compiere) 如果您的企业希望选择开源的ERP,建议选择Compiere吧! Compiere ERP & CRM 为全球范围内的中小型企业提供综合型解决方案,覆盖从客…...

    2024/4/19 10:07:53
  14. Centos之常见目录作用介绍

    我们先切换到系统根目录 / 看看根目录下有哪些目录 [root@localhost ~]# cd / [root@localhost /]# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr [root@localhost /]# 这里首先看下 根目录/ 下的 bin 和 sb…...

    2024/4/17 3:01:42
  15. 一看就懂的ReactJs入门教程

    一、ReactJS简介React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。由于 React 的设计思想极其独特,属于革命性创新,性能出众…...

    2024/4/17 3:03:00
  16. 抱怨不能解决问题,却会给你带来问题

    来公司四年了,每年的工作总结就是写几页word,然后通过邮件发给上级领导。今年受疫情影响,好多同事不用出差,所以就在公司召开一次总结大会。会议要求每人将这两年的工作都做一个总结,新人做一下自我介绍就OK。在准备汇报材料期间,我就想最近两年的工作,其实都是大块的内…...

    2024/4/17 3:02:54
  17. Java开源 ERP与客户管理-Sequoia ERP

    <script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="tex…...

    2024/4/20 15:28:01
  18. LDAP 应用文档

    LDAP 应用文档背景 公司目前使用跳板机进行远程服务器登录,这就意味着需要登录的每台服务器都需要创建相应的用户才能保证用户登录正常,这就造成了用户管理混乱、管理起来麻烦等问题,所以进行上线 LDAP 进行用户统一管理。 问题 应用 LDAP 后还需要保留跳板机,以及海外服务…...

    2024/4/21 12:30:40
  19. Linux下磁盘分区、卸载和磁盘配额

    目录一:查看磁盘信息二:Linux磁盘分区三:Linux分区的卸载四:Linux磁盘配额一:查看磁盘信息fdisk : 这个命令是磁盘分区表操作工具,fdisk能将磁盘分区,同时也能为每个分区指定分区类型,总的来说,fdisk就是磁盘工具fdisk -l : 查看硬盘分区表。 从这里我们可以看出,此系…...

    2024/3/31 21:28:38
  20. 伦敦科研人员发表研究证明,牛初乳采购的品质能显著影响健康收益

    初乳营养公司PanTheryx与著名研究人员合作,揭示初乳采购的重要性及其对消费者的意义科罗拉多州博尔德--(美国商业资讯)--英国普利茅斯大学、伦敦玛丽皇后大学和科罗拉多州博尔德的初乳营养公司PanTheryx的科研人员最新发表的一项研究表明,若干重要品质因素促成的产品生物活性…...

    2024/4/17 3:04:12

最新文章

  1. 【数据库】关于数据库你必须知道的事情

    常用命令 mysql -u username -p USE mydatabase; SHOW DATABASES; CREATE DATABASE newdatabase;数据库的规约 包括&#xff1a; 建表规约&#xff1b;索引规约&#xff1b;SQL与ORM映射规约&#xff1b; Explain技巧 explain的结果代表的含义需要比较清楚。参数中&#x…...

    2024/4/28 23:37:50
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Mac brew 安装软件

    Mac brew 安装软件 homebrew 速度慢 将brew 切换到国内镜像源 # 速度一般 # 步骤一 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git# 步骤二 cd "$(brew --repo)/Library/Taps/homebrew/homebr…...

    2024/4/26 7:26:05
  4. 策略模式图

    策略模式 小小的图解 主要的三个角色 Strategy—抽象策略角色ConcreateStrategy—具体策略角色Context—上下文角色 封装了对具体策略的调用可以使用set的依赖注入也可以使用构造方法 核心是上下文角色 只要调用上下文角色就行&#xff0c;实现解耦 策略 工厂 将上下文角…...

    2024/4/28 11:28:58
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/28 15:57:13
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57