权限框架之Spring Security 认证源码分析
文章目录
- Spring Security 源码分析
- 一 基本知识
- 1.1 核心概念
- 1.2 基本原理
- 二 源码分析
- 2.1 登录验证
- 2.1.1 基本流程
- 2.1.2 验证过滤器
- 2.1.3 尝试认证
- 2.1.4 封装密码认证令牌
- 2.1.5 认证与校验
- 2.1.6 认证失败与成功
Spring Security 源码分析
一 基本知识
1.1 核心概念
- AuthenticationManager, 用户认证的管理类,所有的认证请求(比如login)都会通过提交一个token给
AuthenticationManager
的authenticate()
方法来实现。当然事情肯定不是它来做,具体校验动作会由AuthenticationManager
将请求转发给具体的实现类来做。根据实现反馈的结果再调用具体的Handler来给用户以反馈。这个类基本等同于shiro的SecurityManager
。 - AuthenticationProvider, 认证的具体实现类,一个provider是一种认证方式的实现,比如提交的用户名密码我是通过和DB中查出的user记录做比对实现的,那就有一个
DaoProvider
;如果我是通过CAS请求单点登录系统实现,那就有一个CASProvider
。这个是不是和shiro的Realm的定义很像?基本上你可以帮他们当成同一个东西。按照Spring一贯的作风,主流的认证方式它都已经提供了默认实现,比如DAO、LDAP、CAS、OAuth2等。
前面讲了AuthenticationManager
只是一个代理接口,真正的认证就是由AuthenticationProvider
来做的。一个AuthenticationManager
可以包含多个Provider,每个provider通过实现一个support方法来表示自己支持那种Token的认证。AuthenticationManager
默认的实现类是ProviderManager
。 - UserDetailService, 用户认证通过Provider来做,所以Provider需要拿到系统已经保存的认证信息,获取用户信息的接口spring-security抽象成
UserDetailService
。虽然叫Service,但是我更愿意把它认为是我们系统里经常有的UserDao
。 - AuthenticationToken, 所有提交给
AuthenticationManager
的认证请求都会被封装成一个Token的实现,比如最容易理解的UsernamePasswordAuthenticationToken
。这个就不多讲了,连名字都跟Shiro中一样。 - SecurityContext,当用户通过认证之后,就会为这个用户生成一个唯一的
SecurityContext
,里面包含用户的认证信息Authentication
。通过SecurityContext我们可以获取到用户的标识Principle
和授权信息GrantedAuthrity
。在系统的任何地方只要通过SecurityHolder.getSecruityContext()
就可以获取到SecurityContext
。在Shiro中通过SecurityUtils.getSubject()
到达同样的目的。
1.2 基本原理
二 源码分析
2.1 登录验证
2.1.1 基本流程
AbstractAuthenticationProcessingFilter
- 基于浏览器的基于 HTTP 的身份验证请求的抽象处理器。
- 认证流程,过滤器要求您设置
authenticationManager
属性。 需要AuthenticationManager
来处理由实现类创建的身份验证请求令牌。 - 如果请求与
setRequiresAuthenticationRequestMatcher(RequestMatcher)
匹配,此过滤器将拦截请求并尝试从该请求执行身份验证。 - 身份验证由
attemptAuthentication
方法执行,该方法必须由子类实现。 - 认证成功,如果身份验证成功,则生成的
Authentication
对象将被放入当前线程的SecurityContext
,可供全局使用,该线程保证已由较早的过滤器创建。 - 然后将调用配置的
AuthenticationSuccessHandler
以在成功登录后重定向到适当的目的地。 - 默认行为在
SavedRequestAwareAuthenticationSuccessHandler
中实现,它将利用ExceptionTranslationFilter
设置的任何DefaultSavedRequest
并将用户重定向到其中包含的 URL。 - 验证失败,如果身份验证失败,它将委托给配置的
AuthenticationFailureHandler
以允许将失败信息传达给客户端。 默认实现是SimpleUrlAuthenticationFailureHandler
,它向客户端发送 401 错误代码。 也可以使用失败 URL 进行配置作为替代。 同样,您可以在此处注入所需的任何行为。
2.1.2 验证过滤器
AbstractAuthenticationProcessingFilter
- 当发起HTTP请求进行拦截
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException {//HTTP请求,与响应HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;//不需要认证,就放行if (!requiresAuthentication(request, response)) {chain.doFilter(request, response);return;}if (logger.isDebugEnabled()) {logger.debug("Request is to process authentication");}//封装验证之后的结果Authentication authResult;try {//尝试认证authResult = attemptAuthentication(request, response);if (authResult == null) {return;}sessionStrategy.onAuthentication(authResult, request, response);}catch (InternalAuthenticationServiceException failed) {logger.error("An internal error occurred while trying to authenticate the user.",failed);unsuccessfulAuthentication(request, response, failed);return;}catch (AuthenticationException failed) {//认证失败unsuccessfulAuthentication(request, response, failed);return;}// 认证成功,放行请求,并返回认证之后的结果if (continueChainBeforeSuccessfulAuthentication) {chain.doFilter(request, response);}successfulAuthentication(request, response, chain, authResult);}
2.1.3 尝试认证
//这是一个接口,我们查看他的实现类,当然我们也可以自定义实现类,来重写里面的认证方法
public abstract Authentication attemptAuthentication(HttpServletRequest request,HttpServletResponse response) throws AuthenticationException, IOException,ServletException;
UsernamePasswordAuthenticationFilter
public class UsernamePasswordAuthenticationFilter extendsAbstractAuthenticationProcessingFilter {//默认匹配的URL路径,与提交方式,当然我们也可以更改其默认路径, formLogin().loginProcessingUrl(“XXXX”) public UsernamePasswordAuthenticationFilter() {super(new AntPathRequestMatcher("/login", "POST"));} //尝试认证public Authentication attemptAuthentication(HttpServletRequest request,HttpServletResponse response) throws AuthenticationException {//如果请求方法不是POST,就直接异常if (postOnly && !request.getMethod().equals("POST")) {throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());}//前端传递的信息String username = obtainUsername(request);String password = obtainPassword(request);if (username == null) {username = "";}if (password == null) {password = "";}username = username.trim();//将前端传递的信息,封装成用户名密码认证令牌。方便AuthenticationManager,调用其他方法进行认证处理UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);// Allow subclasses to set the "details" propertysetDetails(request, authRequest);//获取身份验证器,进行验证return this.getAuthenticationManager().authenticate(authRequest);}}
2.1.4 封装密码认证令牌
UsernamePasswordAuthenticationToken
public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationToken {/**认证失败**/public UsernamePasswordAuthenticationToken(Object principal, Object credentials) {super(null);this.principal = principal;this.credentials = credentials;setAuthenticated(false);}/**认证成功**/public UsernamePasswordAuthenticationToken(Object principal, Object credentials,Collection<? extends GrantedAuthority> authorities) {super(authorities);this.principal = principal;this.credentials = credentials;super.setAuthenticated(true); // must use super, as we override}
}
- 获取身份验证器,进行验证
public class ProviderManager implements AuthenticationManager, MessageSourceAware,InitializingBean {//进行认证public Authentication authenticate(Authentication authentication)throws AuthenticationException {//遍历身份验证程序for (AuthenticationProvider provider : getProviders()) {//是否支持 if (!provider.supports(toTest)) {continue;}if (debug) {logger.debug("Authentication attempt using "+ provider.getClass().getName());}//支持进行验证,并返回验证结果 try {result = provider.authenticate(authentication);if (result != null) {copyDetails(authentication, result);break;}}catch (AccountStatusException | InternalAuthenticationServiceException e) {prepareException(e, authentication);// SEC-546: Avoid polling additional providers if auth failure is due to// invalid account statusthrow e;} catch (AuthenticationException e) {lastException = e;}}}}
2.1.5 认证与校验
AbstractUserDetailsAuthenticationProvider
- 一个基本的
AuthenticationProvider
,它允许子类覆盖和使用UserDetails
对象。 - 该类旨在响应
UsernamePasswordAuthenticationToken
身份验证请求。 - 验证成功后,将创建
UsernamePasswordAuthenticationToken
并将其返回给调用者。 - 缓存是通过存储放置在
UserCache
的UserDetails
对象来处理的。 这确保可以验证具有相同用户名的后续请求,而无需查询UserDetailsService
。
public abstract class AbstractUserDetailsAuthenticationProvider implementsAuthenticationProvider, InitializingBean, MessageSourceAware {//验证public Authentication authenticate(Authentication authentication)throws AuthenticationException {// Determine usernameString username = (authentication.getPrincipal() == null) ? "NONE_PROVIDED": authentication.getName();boolean cacheWasUsed = true;UserDetails user = this.userCache.getUserFromCache(username);try {//检查用户情况,账户锁定,账户过期,凭证过期preAuthenticationChecks.check(user);//账号,密码检查additionalAuthenticationChecks(user,(UsernamePasswordAuthenticationToken) authentication);}if (!cacheWasUsed) {this.userCache.putUserInCache(user);}Object principalToReturn = user;if (forcePrincipalAsString) {principalToReturn = user.getUsername();}//返回创建成功凭证return createSuccessAuthentication(principalToReturn, authentication, user);}}
protected Authentication createSuccessAuthentication(Object principal,Authentication authentication, UserDetails user) {// Ensure we return the original credentials the user supplied,// so subsequent attempts are successful even with encoded passwords.// Also ensure we return the original getDetails(), so that future// authentication events after cache expiry contain the detailsUsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(principal, authentication.getCredentials(),authoritiesMapper.mapAuthorities(user.getAuthorities()));result.setDetails(authentication.getDetails());//返回认证时候的结果return result;}
DaoAuthenticationProvider
public class DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
//密码
private PasswordEncoder passwordEncoder;
private volatile String userNotFoundEncodedPassword;//用户信息,数据库中
private UserDetailsService userDetailsService;
private UserDetailsPasswordService userDetailsPasswordService;//认证检查,注意这个方法是废弃了
protected void additionalAuthenticationChecks(UserDetails userDetails,UsernamePasswordAuthenticationToken authentication)throws AuthenticationException {if (authentication.getCredentials() == null) {logger.debug("Authentication failed: no credentials provided");throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials","Bad credentials"));}//前端传递的密码String presentedPassword = authentication.getCredentials().toString();//数据库是中的密码,与前端传递的密码进行比较if (!passwordEncoder.matches(presentedPassword, userDetails.getPassword())) {logger.debug("Authentication failed: password does not match stored value");throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials","Bad credentials"));}}
}
2.1.6 认证失败与成功
AbstractAuthenticationProcessingFilter
//拦截
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;if (!requiresAuthentication(request, response)) {chain.doFilter(request, response);return;}if (logger.isDebugEnabled()) {logger.debug("Request is to process authentication");}Authentication authResult;try {authResult = attemptAuthentication(request, response);if (authResult == null) {// return immediately as subclass has indicated that it hasn't completed// authenticationreturn;}sessionStrategy.onAuthentication(authResult, request, response);}catch (InternalAuthenticationServiceException failed) {logger.error("An internal error occurred while trying to authenticate the user.",failed);//认证失败unsuccessfulAuthentication(request, response, failed);return;}catch (AuthenticationException failed) {// Authentication failed//认证失败unsuccessfulAuthentication(request, response, failed);return;}// Authentication successif (continueChainBeforeSuccessfulAuthentication) {chain.doFilter(request, response);}//认证成功successfulAuthentication(request, response, chain, authResult);}//认证失败,当然我们也可以重写失败的提示
protected void unsuccessfulAuthentication(HttpServletRequest request,HttpServletResponse response, AuthenticationException failed)throws IOException, ServletException {SecurityContextHolder.clearContext();if (logger.isDebugEnabled()) {logger.debug("Authentication request failed: " + failed.toString(), failed);logger.debug("Updated SecurityContextHolder to contain null Authentication");logger.debug("Delegating to authentication failure handler " + failureHandler);}rememberMeServices.loginFail(request, response);failureHandler.onAuthenticationFailure(request, response, failed);}//认证成功,当然我们也可以重写
protected void successfulAuthentication(HttpServletRequest request,HttpServletResponse response, FilterChain chain, Authentication authResult)throws IOException, ServletException {if (logger.isDebugEnabled()) {logger.debug("Authentication success. Updating SecurityContextHolder to contain: "+ authResult);}//存入上下文SecurityContextHolder.getContext().setAuthentication(authResult);rememberMeServices.loginSuccess(request, response, authResult);// Fire eventif (this.eventPublisher != null) {eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authResult, this.getClass()));}successHandler.onAuthenticationSuccess(request, response, authResult);}
- 以上就是认证的源码分析流程
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 评论区抽奖程序2.0
评论区抽奖程序2.0 稍微的加了一点点功能,让程序更加的自动化了 【送书活动】 每周三发文章送书,两本 开奖时间为周五晚上8.00 下周书籍寄出 关注博主,每周抽奖 1. 程序作用 从某CSDN文章的评论区抽取人,至于抽人干嘛ÿ…...
2024/4/19 13:41:59 - 养成数据分析师的品质和思维模式
Xmind文件下载 链接:https://pan.baidu.com/s/1IrsSlHuQOl0zMIJ8tjcxgw 提取码:qr3q...
2024/4/19 21:37:06 - git 本地重新关联新的远程仓库命令/查看本地关联远程仓库
git remote -v // 查看本地已经关联的远程仓库 git remote rm name // # 删除远程仓库 git remote rename old_name new_name // # 修改仓库名 git remote add name 远程仓库地址 // name 为要取的仓库名字 远程仓库地址 为要关联的远程仓库地址...
2024/4/21 22:48:22 - 机器学习白化whitening
https://blog.csdn.net/hjimce/article/details/50864602...
2024/4/19 6:59:35 - pytorch之torch.nn.Conv2d()函数详解
文章目录 一、官方文档介绍二、torch.nn.Conv2d()函数详解参数详解参数dilation——扩张卷积(也叫空洞卷积)参数groups——分组卷积 三、代码实例 一、官方文档介绍 官网 nn.Conv2d:对由多个输入平面(多通道)组成的…...
2024/4/14 21:46:52 - 短租listing数据分析(探索性数据分析+简单建模尝试)
Xmind文件下载 链接:https://pan.baidu.com/s/1jDgGsL2Zp1Cv8ZOlslJyZg 提取码:oyqf...
2024/4/14 21:46:47 - Python小记 面向对象-类
文章目录类属性类方法总结实例方法构造方法 __init__()私有方法析构方法 __del__()静态方法、类方法property抽象方法专有方法继承super类属性 实例属性 不同实例不关联 私有属性 __开头。__var 不能在类外访问 类属性 类名.变量名 所有实例共有 class test:name test # 类…...
2024/4/14 21:46:32 - java连接mysql
1、驱动包 使用maven的中央仓库来查找安装:https://mvnrepository.com/ 在pom中添加依赖配置 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0…...
2024/4/15 14:39:22 - 2021-11-06文件共享
...
2024/4/20 6:39:57 - 三相直流无刷电机驱动
有霍尔BLDC的基本原理是用所谓“六步换向法”,根据转子当前的位置,按照一定的顺序给定子绕组通电使BLDC电机转动。 一个简单的BLDC的构造如图所示。电机外层是定子,包含电机绕组。多数BLDC都有三个Y型连接的绕组,这些绕组中的每一…...
2024/4/19 16:03:05 - JAVA高级学习(一)——Collection集合
一、集合的概念 用来提供一种存储孔吉安可变的存储模型,存储的数据容量可以随时发生改变。 集合体的结构: 接口 接口实现类特点Collection 单列集合List 集合ArrayList 先进先出排序,元素可重复LinkedLis…...
2024/4/17 23:37:34 - 蓝桥杯03-数码管的显示
文章目录前言一、基础二、代码部分1.数码管数字显示部分2.译码器的选择部分3.数码管的显示前言 用一个小题目来演示数码管的显示: 蓝桥杯的单片机平台上一共有八个数码管,我们依次让他们显示0-7 8个数字 一、基础 分析一个陌生器件的功能,…...
2024/4/14 21:46:37 - echarts水球图-动态波纹百分比数据显示
最近帮助朋友根据ued图学习设计了一个echarts水球图,觉得还蛮有意思的,在这记录一下 具体效果: 废话不多说,在这先给大家看一下是什么样子的效果,会不会是你以后也会用到的: 看看,这种带比例的…...
2024/4/24 14:55:17 - MySQL进阶三板斧(三)看清“触发器 (Trigger)
3. 实现复杂的数据完整性规则 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不同,触发器可以引用列或数据库对象。例如,触发器可回退任何企图吃进超过自己保证金的期货。 提供可变的缺省值。 4. 实现复杂的非标准的数…...
2024/4/14 21:46:57 - Cannot find a valid baseurl for repo: base/7/x86_64 yum -y install rsync 报错
1.先看下与之相配的克隆机的内网能不能ping成功 ping one204 若内网成功, ping www.baidu.com外网不成功, 则可能有是网关配置问题,查看网关是否匹配, 查看虚拟机网关 进入VMware 》编辑》虚拟网络编辑器》选择NAT8 NAT模式》选择…...
2024/4/14 21:46:47 - python_requests请求
发送get请求: url "http://s"#请求地址 data {"name":"陈雪"}#请求参数 response requests.get(url,data)#发get请求 print(response.json()) #返回的是一个字典,如果返回的json不合法就会报错 发送post请求…...
2024/4/15 11:43:45 - 对第一个java程序进行总结
1.java程序编写-编译-运行的过程 编写:我们将编写的java代码保存在以".java"结尾的源文件中 编译:使用javac.exe命令编译我们的java源文件。格式:javac 源文件名.java 运行:使用java.exe命令解释运行我们的字节码文件。…...
2024/4/14 21:46:57 - 综合实例--爬取豆瓣所有电影分类
目录需求简介需要用到的库分步实现完整实现需求简介 获取豆瓣电影所有的分类 在各种分类的电影中按照次序找到前20部电影,获取其信息,如电影名称,电影海报,评价人数,演员列表等等 拟要达到的效果,将电影…...
2024/4/20 3:39:32 - matplotlib坐标角度显示(rotation参数)
话不多说,上图上代码 rotation60,旋转60度...
2024/4/5 5:42:16 - linux系统的基本命令
常用命令 打开终端:ctrl alt t或者右键在终端中打开 退出终端:exit 切换到到管理员(#):sudo su 退出exit ls: 一个可执行的二进制文件,可查看当前目录下的文件都有啥 ls -l查看文件类型(普通 …...
2024/4/14 21:47:38
最新文章
- excel 按照姓名日期年月分组求和
excel 需要按照 姓名 日期的年份进行金额求和统计,采用sumifs 进行统计 注意:sumifs 不支持 合并列拆分计算,合并列只会计算一个值 表格数据大概如下:(sheet) ABC姓名日期金额A2023/01/01500A2023/01/151500B2023/01/01200B202…...
2024/4/25 13:09:41 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - yolov9直接调用zed相机实现三维测距(python)
yolov9直接调用zed相机实现三维测距(python) 1. 相关配置2. 相关代码2.1 相机设置2.2 测距模块2.2 实验结果 相关链接 此项目直接调用zed相机实现三维测距,无需标定,相关内容如下: 1. yolov4直接调用zed相机实现三维测…...
2024/4/25 5:18:48 - 逆向案例十二——看准网企业信息json格式的信息
网址:【全国公司排行|排名榜单|哪家好】-看准网 打开开发者工具——刷新——网络——XHR——下滑页面加载新的页面——找到数据包 发现参数加密,返回的数据也进行了加密 按关键字在下方搜索 kiv进入第一个js文件 ctrlf打开文件里面的搜索框继续搜kiv找到…...
2024/4/23 6:21:06 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/25 11:51:20 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/23 13:30:22 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/23 13:28:06 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/24 18:16:28 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/23 13:27:44 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/19 11:57:53 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/23 13:29:53 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/23 13:27:22 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/23 13:28:42 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/23 22:01:21 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/23 13:29:23 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/25 0:00:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/25 4:19:21 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/19 11:59:23 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/19 11:59:44 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/24 16:38:05 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/23 13:28:14 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/23 13:27:51 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/23 13:27:19 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) 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 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在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