Spring Security(一):最简单的Spring Security程序
一:简介
权限管理常用的有Apache Shiro和Spring Security, Apache Shiro简单易用,Spring Security集成复杂,但功能强大,可以与Spring的其它框架配合使用。随着Spring Cloud的流行,大家都开始慢慢使用"Spring 全家桶"(全家桶就是整个项目都使用Spring的框架,这样Spring Security慢慢的流行起来)。本系列文章整理了本人学习Spring Security的过程。
二:最简单的Spring Security程序
1. 引入spring-boot-starter-security依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. 一个简单的测试Controller
@RestController
public class ExampleController {@GetMapping("helloworld")public List<String> helloworld() {return Arrays.asList("Spring Security simple demo");}
}
3. 开始验证
- 启动应用程序,控制台会打印一个生成的密码,如"Using generated security password: 4dd8384a-bc9e-4df0-9124-6686c9a813fa",该密码每次启动应用程序都会改变
- 访问 http://localhost:8081/helloworld
- 系统会自动重定向到 http://localhost:8081/login (注意:这个登录页面不是自己写的,是Spring Security默认的登录页面)
- 输入用户名和密码,用户名为"user", 密码就是控制台生成的"4dd8384a-bc9e-4df0-9124-6686c9a813fa"
- 系统会自动重定向到 http://localhost:8081/helloworld ,从而能够访问到接口
三:示例分析
可以看到上面集成Spring Security非常简单(虽然这只是雏形),示例是一个认证过程(也就是登录功能),要学会Spring Security个人觉得非常有必要看一下源码是如何实现的,下面就简单的分析一下整个认证的过程, 我们可以根据控制台输出的日志来窥探整个认证执行的流程。
下面是Spring Security认证的重要流程,自己可以打断点看一下程序是怎么执行的。
过程一:从访问的目标接口重定向到登录页面
http://localhost:8080/helloworld
| AnonymousAuthenticationFilter#doFilter 检查安全上下文SecurityContextHolder中是否有认证信息,如果没有就设置为匿名认证令牌AnonymousAuthenticationToken
| FilterSecurityInterceptor extends AbstractSecurityInterceptor#doFilter| FilterSecurityInterceptor#invoke| AbstractSecurityInterceptor#beforeInvocation| AffirmativeBased extends AbstractAccessDecisionManager#decide 访问决定管理器: 决定一个url是否有权限访问,具体决定操作由投票器决定| WebExpressionVoter#vote() 投票器: 对url是否有权限访问进行投票,是否允许访问,允许则投"通过",不允许则投"拒绝"| ExpressionUtils#evaluateAsBoolean|SpelExpression#getValue(org.springframework.expression.EvaluationContext, java.lang.Class<T>)| PropertyOrFieldReference#getValueInternal()| PropertyOrFieldReference#readProperty| ReflectivePropertyAccessor.OptimalPropertyAccessor#read| SecurityExpressionRoot#isAuthenticated() 投票的最终结果(拒绝)| 如果投票结果是拒绝则抛出访问拒绝异常new AccessDeniedException("Access is denied")
| ExceptionTranslationFilter#doFilter 异常转换过滤器:用于捕获过滤器抛出的异常,并作出适当的处理| catch(Exception ex)| handleSpringSecurityException(request, response, chain, ase)| sendStartAuthentication() | DelegatingAuthenticationEntryPoint#commence| LoginUrlAuthenticationEntryPoint#commence| DefaultRedirectStrategy#sendRedirect(request, response, redirectUrl); 重定向登录路径redirectUrl="http://localhost:8081/login"| response.sendRedirect(redirectUrl)
| DefaultLoginPageGeneratingFilter#doFilter 拦截登录路径"/login", 如果没有指定登录页面就会生成默认的登录页面| generateLoginPageHtml()| response.setContentType("text/html;charset=UTF-8")| response.getWriter().write(loginPageHtml)
过程二:从登录页面重定向到目标接口
| 输入用户名、密码登录
| UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter#doFilter| Authentication authResult = attemptAuthentication(request, response) 尝试认证| authRequest = new UsernamePasswordAuthenticationToken(username, password)| ProviderManager.authenticate(authRequest)| DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider#authenticate| retrieveUser(username, authentication) | UserDetails loadedUser = this.getUserDetailsService().loadUserByUsername(username)| InMemoryUserDetailsManager#loadUserByUsername 如果用户名错误会抛异常 UsernameNotFoundException| additionalAuthenticationChecks(user, authentication)| passwordEncoder.matches(presentedPassword, userDetails.getPassword()) 检查密码,如果密码不匹配则抛出异常BadCredentialsException| successfulAuthentication(request, response, chain, authResult) 处理认证成功操作| SavedRequestAwareAuthenticationSuccessHandler#onAuthenticationSuccess| SimpleUrlAuthenticationSuccessHandler#onAuthenticationSuccess| handle(request, response, authentication)| DefaultRedirectStrategy#sendRedirect(request, response, targetUrl) | response.sendRedirect(redirectUrl) 重定向到"http://localhost:8080/helloworld"
首先我们要知道Spring Security的基本原理就是用一堆过滤器来实现的,就是一个请求过来会经过很多个过滤器的拦截,如果所有过滤器都通过就能访问,如果不满足条件就抛异常,终止访问。
过程一源码分析
- 启动应用程序,访问接口http://localhost:8080/helloworld
- ”/helloworld“ 路径首先会被AnonymousAuthenticationFilter进行拦截,该拦截器会检查认证上下文SecurityContextHolder中是否有认证信息,如果没有就给一个匿名认证信息
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {if (SecurityContextHolder.getContext().getAuthentication() == null) {Authentication authentication = createAuthentication((HttpServletRequest) req);SecurityContextHolder.getContext().setAuthentication(authentication);chain.doFilter(req, res);}
}protected Authentication createAuthentication(HttpServletRequest request) {AnonymousAuthenticationToken auth = new AnonymousAuthenticationToken("12676a06-df4a-475b-bb7c-4d3ec4bd1c9b","anonymousUser", Arrays.asList("ROLE_ANONYMOUS"));auth.setDetails(authenticationDetailsSource.buildDetails(request));return auth;
}
- FilterSecurityInterceptor是Spring Security过滤器链中的最后一个过滤器,负责来决定请求是否最终有权限来访问。在该过滤器方法调用中链中AbstractAccessDecisionManager#decide和WebExpressionVoter#vote是需要注意的两个方法,WebExpressionVoter是一种投票器,可以对访问的url进行投票,可以投"通过",也可以投"拒绝"。 SecurityExpressionRoot#isAuthenticated()方法会返回最终的投票的结果。Spring Security默认所有的请求都需要登录认证,因我们访问"/helloworld"接口没有登录,所以投票器会投"拒绝"票(AccessDecisionVoter.ACCESS_DENIED)
public class AffirmativeBased extends AbstractAccessDecisionManager {public void decide(Authentication authentication, Object object, Collection<ConfigAttribute> configAttributes) throws AccessDeniedException {int deny = 0;for (AccessDecisionVoter voter : getDecisionVoters()) {int result = voter.vote(authentication, object, configAttributes);if (logger.isDebugEnabled()) {logger.debug("Voter: " + voter + ", returned: " + result);}switch (result) {case AccessDecisionVoter.ACCESS_GRANTED:return;case AccessDecisionVoter.ACCESS_DENIED:deny++;break;default:break;}}// 如果有"拒绝"票,则抛出访问拒绝异常if (deny > 0) {throw new AccessDeniedException(messages.getMessage("AbstractAccessDecisionManager.accessDenied", "Access is denied"));}checkAllowIfAllAbstainDecisions();}
}
- ExceptionTranslationFilter是倒数第二个过滤器,它会捕获FilterSecurityInterceptor抛出的异常并对异常进行逻辑处理。如果访问拒绝(认证失败)就会重定向到登录地址"/login"
public class ExceptionTranslationFilter extends GenericFilterBean {public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {try {chain.doFilter(request, response);} catch (Exception ex) {handleSpringSecurityException(request, response, chain, ase);}}private void handleSpringSecurityException(HttpServletRequest request, HttpServletResponse response, FilterChain chain, RuntimeException exception)throws IOException, ServletException {if (exception instanceof AccessDeniedException) {Authentication authentication = SecurityContextHolder.getContext().getAuthentication();if (authenticationTrustResolver.isAnonymous(authentication) || authenticationTrustResolver.isRememberMe(authentication)) {sendStartAuthentication(request, response, chain, new InsufficientAuthenticationException(messages.getMessage("ExceptionTranslationFilter.insufficientAuthentication", "Full authentication is required to access this resource")));}}
}
public class DefaultRedirectStrategy implements RedirectStrategy {public void sendRedirect(HttpServletRequest request, HttpServletResponse response,String url) throws IOException {String redirectUrl = calculateRedirectUrl(request.getContextPath(), url);// http://localhost:8080/loginredirectUrl = response.encodeRedirectURL(redirectUrl);if (logger.isDebugEnabled()) {logger.debug("Redirecting to '" + redirectUrl + "'");}response.sendRedirect(redirectUrl);}
}
- 当系统访问"/login"路径时会被默认的登录页面生成过滤器DefaultLoginPageGeneratingFilter所拦截,系统会判断自己有没有指定登录页面,如果没有指定系统就会生成一个默认的登录页面
public class DefaultLoginPageGeneratingFilter extends GenericFilterBean {public static final String DEFAULT_LOGIN_PAGE_URL = "/login";public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;boolean loginError = isErrorPage(request);boolean logoutSuccess = isLogoutSuccess(request);if (isLoginUrlRequest(request) || loginError || logoutSuccess) {// 生成登录页面String loginPageHtml = generateLoginPageHtml(request, loginError, logoutSuccess);response.setContentType("text/html;charset=UTF-8");response.setContentLength(loginPageHtml.getBytes(StandardCharsets.UTF_8).length);response.getWriter().write(loginPageHtml);return;}chain.doFilter(request, response);}
}
过程二源码分析
- 用户在登录页面输入用户名和密码点击登录
- 登录时被用户名密码认证过滤器UsernamePasswordAuthenticationFilter所拦截,去校验用户名和密码是否正确。检查用户名是在DaoAuthenticationProvider#retrieveUser(username, authentication) 方法中检查,检查密码是在DaoAuthenticationProvider#additionalAuthenticationChecks(user, authentication)中检查。如果用户名和密码都是正确的,则重定向到上次访问的路径上,即我们第一次访问的"http://localhost:8080/helloworld"路径上。
public class DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {protected final UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {prepareTimingAttackProtection();try {UserDetails loadedUser = this.getUserDetailsService().loadUserByUsername(username);if (loadedUser == null) {throw new InternalAuthenticationServiceException("UserDetailsService returned null, which is an interface contract violation");}return loadedUser;}catch (UsernameNotFoundException ex) {mitigateAgainstTimingAttack(authentication);throw ex;}catch (InternalAuthenticationServiceException ex) {throw ex;}catch (Exception ex) {throw new InternalAuthenticationServiceException(ex.getMessage(), ex);}}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"));}}
}
public class InMemoryUserDetailsManager implements UserDetailsManager, UserDetailsPasswordService {public UserDetails loadUserByUsername(String username)throws UsernameNotFoundException {UserDetails user = users.get(username.toLowerCase());// 检查用户名是否正确if (user == null) {throw new UsernameNotFoundException(username);}return new User(user.getUsername(), user.getPassword(), user.isEnabled(),user.isAccountNonExpired(), user.isCredentialsNonExpired(),user.isAccountNonLocked(), user.getAuthorities());}
}
四:Spring Security 默认的配置
Spring Security中可以通过配置来配置一些参数,比如哪些路径需要认证,登录页面相关的配置(如登录的路径、登录成功时要跳转的路径、登录成功时的处理器、登录失败时要跳转的路径、登录失败时的处理器、登出的路径等)、在过滤器链中添加自己的过滤器(addFilterBefore)等,可以配置很多。如果没有显式配置Spring Security会提供一套默认的值,默认的配置大致如下配置:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable()// 配置需要认证的请求.authorizeRequests().anyRequest().authenticated().and()// 登录表单相关配置.formLogin().usernameParameter("username").passwordParameter("password").failureUrl("/login?error").permitAll().and()// 登出相关配置.logout().permitAll();}
}
五: Spring Security过滤器链
Spring Security主要用于认证Authentication(登录)和授权Authorize(api是否有权访问),实现这些功能的基本原理就是过滤器链,即当访问一个url时会被过滤器链中的每个过滤器所拦截,如果每个过滤器都没有抛异常则表示当前用户允许访问该url,则重定向到用户需要访问的url上,如果有一个过滤器抛出异常了则表示当前用户没有权限访问该url,此时可以报错。
Spring Security使用到的过滤器:
- WebAsyncManagerIntegrationFilter
- SecurityContextPersistenceFilter
- HeaderWriterFilter
- CsrfFilter
- LogoutFilter
- BasicAuthenticationFilter
- UsernamePasswordAuthenticationFilter
- RememberMeAuthenticationFilter
- SocialAuthenticationFilter
- DefaultLoginPageGeneratingFilter
- DefaultLogoutPageGeneratingFilter
- RequestCacheAwareFilter
- SecurityContextHolderAwareRequestFilter
- SessionManagementFilter
- AnonymousAuthenticationFilter
- ExceptionTranslationFilter
- FilterSecurityInterceptor
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- PTA古风排版
7-7 古风排版 (20 分)中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。输出格式:按古风格式排版给定的字…...
2024/3/28 19:41:46 - 无法初始化Winsock2.2处理
场景: 在一次,频繁切代理和vpn软件过程中,导致打开profilter是报:无法初始化Winsock2.2,请确保您的网络子系统可正常工作。且我的网卡无法显示无线网络设备。我的环境如下: 处理: 1)打开注册表,cmd输入regedit 2)找到以下项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont…...
2024/3/22 13:40:25 - 实用网址
http://www.ibook8.com 电子书下载http://www.jeecms.com 开源CMS http://sjzdn.blog.hexun.com/ 电脑维修博客 http://www.quiee.com.cn/ 报表网站 http://www.feeten.cn/ 飞天站长社区 http://www.xsyjr.cn/ 手机软件网站 http://www.ijavascript.cn/ javascript…...
2024/3/24 12:22:25 - Android中一个轻量级的存储方案(SharedPreferences)
使用SharedPreference方案来存储数据,适用于存储一些经常变动的数据,比如说存储一个游戏进度等。 MainActivity.java:package com.miao.filestrore;import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.support.v7.app.…...
2024/3/23 8:39:24 - 手把手教你TestComplete_文件比对算法讨论
文件比对是一个非常古老的话题,但是真要做好并不容易。来看看下面两个文件: FILE1: A B D E F FILE2:B C D E G首先琢磨一下,影响效率的因素: 1. 读文件,硬盘IO读写肯定是很花时间的,两种读法,一种是一次全部读入,比较占内存,另一种是边做边读,省内存,写起来麻…...
2024/3/23 13:37:18 - Thymeleaf整合Spring Security,解析sec标签没有效果
今天学习了Spring Security,尝试将其和Thymeleaf进行整合。<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"> <head> <meta charset="UTF-…...
2024/3/23 15:28:55 - 因为重置网络“netsh winsock reset”导致开不了机
因为重置网络“netsh winsock reset”导致开不了机 这次是因为要让虚拟机能通过桥接模式上网手贱去控制台输入“netsh winsock reset”这一条从网上找到的操作导致电脑重启后进入了以下画面:然后问了一堆人都没其他办法,只能重装系统或者重置电脑。我是选重置电脑,毕竟这样比…...
2024/3/24 1:55:14 - 花间美人:古风 CG插画技法
《花间美人:古风 CG插画技法》 基本信息 作者: 猫君大白 出版社:机械工业出版社 ISBN:9787111429432 上架时间:2013-7-3 出版日期:2013 年7月 开本:16开 页码:1 版次:1-1 所属分类:艺术 > 美术 > 材料及技法研究更多关于 》》》《花间美人:古风 CG插画技法…...
2024/3/23 20:53:11 - Android轻量存储值SharedPreference存世实例
MainActivity代码:package com.example.sharedpreference1;import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.provider.Settings; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; impo…...
2024/3/28 20:07:51 - 通过iBook上的Airport网卡让NDS使用WiFi功能
麦课一班有人提问道,如何在没有基站的情况下,让NDS使用WiFi功能。我想了一下说,只要有无线接入点就可以。今天有空就自己试了一下,的确可以。基本原理就是用一台能够上网的计算机设备,通过无线网卡构造一个无线点对点网络(Computer to Computer Network)的网络环境,然后共…...
2024/3/28 20:07:53 - 【一起学生信】认识MAPQ
目录MAPQ 定义MAPQ的影响因素比对算法中MAPQ的实现 MAPQ(Mapping Qualities) 用来表示每条read的比对情况,MAPQ越高,表示比对质量越好,后续可以根据分析需要来进行过滤。 MAPQ 定义 从概率的角度来看,每个read的比对都是一个真实比对的估计,它是一个随机变量,也有可能存…...
2024/3/28 20:07:50 - Spring Boot + Spring Security 实现自动登录功能
自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱:很多网站我们在登录的时候都会看到类似的选项,毕竟总让用户输入用户名密码是一件很麻烦的事。 自动登录功能就是,用户在登录成功后,在某一段时间内,如果用户关闭了浏览器并重新打开,或者服务器重启了…...
2024/3/28 20:07:48 - VMware虚拟机黑屏,重启电脑无效的一些解决办法
VMware虚拟机黑屏,重启无效的解决方法 多开虚拟机好几个月了,不知道最近抽了什么疯,VMware只能启动两个 方法0、前置:确保电脑配置能带动虚拟机 方法1、重置winsock目录 1.1 管理员打开cmd1.2 输入netsh winsock reset1.3 重启电脑,重启虚拟机 如果重启电脑之后只是暂时解…...
2024/3/8 0:42:39 - C语言:古风排版
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。输出格式:按古风格式排版给定的字符串,每列N个字符(除…...
2024/3/24 14:32:50 - 使用IDEA回退SVN到某个历史版本
记录一下,不完美解决方案。目前只能做到回退到某个版本,但不能提交代码,一更新又会把SVN服务器上的最新代码又拉下来了。1.在项目上右键,选择更新到某个版本2.点文件夹选择你要回退的版本,按ok3.回退后是无法提交的,所以需要比较新老版本的差异,我是本办法,手动进行比对…...
2024/3/24 6:02:08 - 数据库原理与应用视频
数据库原理与应用视频 - 北京师范大学http://www.ibook8.com/Software/Catalog58/11139.html...
2024/3/24 8:06:02 - L1-039. 古风排版
L1-039. 古风排版时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度…...
2024/3/23 17:42:34 - 详细介绍SpringBoot整合SpringSecurity
本文我们来详细给小伙伴们介绍下SpringBoot整合SpringSecurity的过程,用到的技术为:SpringBoot2.2.1+SpringSecurity+SpringDataJPA+jsp来整合。 一、环境准备 1.创建SpringBoot项目创建一个SpringBoot项目 2.导入基础依赖导入基础的依赖 <parent><groupId>org.s…...
2024/3/22 13:40:42 - winsock重置
winsock是Windows网络编程接口,winsock工作在应用层,它提供与底层传输协议无关的高层数据传输编程接口 netsh winsock reset 是把它恢复到默认状态netsh winsock reset命令,作用是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需…...
2024/3/24 8:36:05 - 遇到错误(firefox 打不开 重置winsock bug)
异常 1、firefox打不开 qq Initialization failure:0x0000000C解决:进入cmd 输入NETSH WINSOCK RESET CATALOG 重置winsock目录...
2024/3/4 6:59:08
最新文章
- <QT基础(5)>事件监听
事件监听 事件监听(Event Handling)是在程序中监视和响应发生的事件的一种机制。在Qt中,事件监听是一种常见的用于处理用户输入、系统事件以及其他类型事件的方法。通过事件监听,您可以在发生特定事件时捕获事件并执行相应的操作…...
2024/3/28 22:26:00 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 【项目管理——时间管理】【自用笔记】
1 项目时间管理(进度管理)概述 过程:(2—6)为规划过程组,7为监控过程组 题目定义:项目时间管理又称为进度管理,是指确保项目按时完成所需的过程。目标:时间管理的主要目标…...
2024/3/28 7:37:55 - 埃克拉姆·阿拉姆,MindPortal的CEO和联合创始人 - 采访系列
Ekram Alam 专访:MindPortal 创始人兼首席执行官 引言 Ekram Alam 是 MindPortal 的创始人兼首席执行官,该公司致力于开发非侵入式神经接口,改变人类与人工智能的交互方式。他们的使命是通过让用户仅通过思想与人工智能交互,从而…...
2024/3/28 10:04:37 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/3/27 10:21:24 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/3/24 20:11:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/3/18 12:12:47 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/3/24 20:11:23 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/3/26 20:58:42 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/3/28 17:01:12 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/3/24 5:55:47 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/3/27 10:28:22 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/3/26 23:04:51 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/3/26 11:20:25 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/3/24 20:11:18 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/3/28 9:10:53 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/3/24 20:11:16 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/3/24 20:11:15 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/3/27 7:12:50 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/3/24 20:11:13 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/3/26 11:21:23 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/3/28 18:26:34 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/3/28 12:42:28 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/3/28 20:09:10 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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