SpringBoot中使用Spring Security实现权限控制
Spring Security,这是一个专门针对基于Spring的项目的安全框架,它主要是利用了AOP来实现的。以前在Spring框架中使用Spring Security需要我们进行大量的XML配置,但是,Spring Boot针对Spring Security也提供了自动配置的功能,这些默认的自动配置极大的简化了我们的开发工作,我们今天就来看看这个吧。
创建Project并添加相关依赖
数据库使用MySQL,所以添加mysql驱动,
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.wangh</groupId><artifactId>springboot_security</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springboot_security</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency><!-- thymeleaf-extras-springsecurity4 --><dependency><groupId>org.thymeleaf.extras</groupId><artifactId>thymeleaf-extras-springsecurity4</artifactId></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.6</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
配置application.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/girl?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=system
spring.datasource.password=mysql
logging.level.org.springframework.security=info
spring.thymeleaf.cache=false
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
定义用户和角色
我们这里使用JPA来定义用户和角色,用户和角色都存储在数据库中,我们直接通过在数据库中查询然后来使用。
定义角色
package com.wangh.springboot_security.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/*** 角色* @author WangZhen*/
@Entity
public class SysRole {@Id@GeneratedValueprivate Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
定义用户
我们在定义用户的时候需要实现UserDetails接口,这样我们的用户实体即为Spring Security所使用的用户,定义好用户之后,我们还要配置用户和角色之间的多对多关系,正常情况下,角色和权限是两回事,所以我们还需要重写getAuthorities方法,将用户的角色和权限关联起来
package com.wangh.springboot_security.model;import java.util.ArrayList;
import java.util.Collection;
import java.util.List;import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
/*** 使用JPA定义用户。实现UserDetails接口,用户实体即为springSecurity所使用的用户。* @author WangZhen*/
@Entity
public class SysUser implements UserDetails {private static final long serialVersionUID = 1L;@Id@GeneratedValueprivate Long id;private String username;private String password;//FetchType.EAGER:急加载。在加载一个实体的时候,其中定义是急加载的的属性(property)和字段(field)会立即从数据库中加载 //CascadeType:级联更新@ManyToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)private List<SysRole> roles;@Overridepublic Collection<? extends GrantedAuthority> getAuthorities() {//将用户角色作为权限List<GrantedAuthority> auths = new ArrayList<GrantedAuthority>();List<SysRole> roles = this.getRoles();for(SysRole role : roles){auths.add(new SimpleGrantedAuthority(role.getName()));}return auths;}@Overridepublic String getPassword() {return password;}@Overridepublic String getUsername() {return username;}@Overridepublic boolean isAccountNonExpired() {return true;}@Overridepublic boolean isAccountNonLocked() {return true;}@Overridepublic boolean isCredentialsNonExpired() {return true;}@Overridepublic boolean isEnabled() {return true;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public List<SysRole> getRoles() {return roles;}public void setRoles(List<SysRole> roles) {this.roles = roles;}public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}
}
预设测试数据
在src/main/resources下新建data.sql.
insert into SYS_USER (id,username,password) values(1,'wanghao','wanghao');
insert into SYS_USER (id,username,password) values(2,'wangtuo','wangtuo');insert into SYS_ROLE (id,name) values(1,'ROLE_ADMIN');
insert into SYS_ROLE (id,name) values(2,'ROLE_USER');insert into SYS_USER_ROLES (SYS_USER_ID, ROLES_ID) values(1,1);
insert into SYS_USER_ROLES (SYS_USER_ID, ROLES_ID) values(2,2);
经过上面步骤之后我们的用户就和角色关联起来了,这个时候运行Project就会在数据库中自动帮我们生成三张表,用户表、角色表和两者的关联表,并有初始数据。
创建传值对象
数据创建成功之后,在客户端请求网页的时候我们需要有一个实体类用来向客户端传递消息,那我们创建一个Msg对象:
package com.wangh.springboot_security.model;public class Msg {private String title;private String content;private String extraInfo;public Msg(String title, String content, String extraInfo) {super();this.title = title;this.content = content;this.extraInfo = extraInfo;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getExtraInfo() {return extraInfo;}public void setExtraInfo(String extraInfo) {this.extraInfo = extraInfo;}
}
创建数据访问接口
package com.wangh.springboot_security.repository;import org.springframework.data.jpa.repository.JpaRepository;import com.wangh.springboot_security.model.SysUser;public interface SysUserRepository extends JpaRepository<SysUser, Long> {/*** 根据用户名查用户* @param username* @return*/SysUser findByUsername(String username);
}
自定义UserDetailsService
首先这里我们需要重写UserDetailsService接口,然后实现该接口中的loadUserByUsername方法,通过该方法查询到对应的用户,这里之所以要实现UserDetailsService接口,是因为在Spring Security中我们配置相关参数需要UserDetailsService类型的数据。
package com.wangh.springboot_security.service;import javax.annotation.Resource;import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;import com.wangh.springboot_security.model.SysUser;
import com.wangh.springboot_security.repository.SysUserRepository;
/*** 自定义UserService需实现UserDetailsService接口。可直接返回给springSecurity使用。* @author WangZhen**/
public class CustomUserService implements UserDetailsService {@Resourceprivate SysUserRepository sysUserRepository;//重写获得用户@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {SysUser user = sysUserRepository.findByUsername(username);if(user == null){throw new UsernameNotFoundException("用户不存在");}return user;}}
SpringMVC配置
package com.wangh.springboot_security.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*** springMVC配置* @author WangZhen*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter{/*** 注册访问登录转向login.html页面*/@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/login").setViewName("login");}
}
当用户访问login时跳转到login.html页面。
配置Spring Security
package com.wangh.springboot_security.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/*** Spring Security配置* @author WangZhen*/
import org.springframework.security.core.userdetails.UserDetailsService;import com.wangh.springboot_security.service.CustomUserService;
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {//扩展SpringSecurity配置需要继承此类@BeanUserDetailsService customUserService(){//注册UserDetailsService的beanreturn new CustomUserService();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(customUserService());//添加自定义的userDetailsService认证}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated()//所有的请求需要认证即登陆后才能访问.and().formLogin().loginPage("/login").failureUrl("/login?error").permitAll() //登录页面可任意访问.and().logout().permitAll();//注销请求可任意访问}
}
1.首先当我们要自定义Spring Security的时候我们需要继承自WebSecurityConfigurerAdapter来完成,相关配置重写对应 方法即可。
2.我们在这里注册CustomUserService的Bean,然后通过重写configure方法添加我们自定义的认证方式。
3.在configure(HttpSecurity http)方法中,我们设置了登录页面,而且登录页面任何人都可以访问,然后设置了登录失败地址,也设置了注销请求,注销请求也是任何人都可以访问的。
4.permitAll表示该请求任何人都可以访问,.anyRequest().authenticated(),表示其他的请求都必须要有权限认证。
5.这里我们可以通过匹配器来匹配路径,比如antMatchers方法,假设我要管理员才可以访问admin文件夹下的内容,我可以这样来写:.antMatchers(“/admin/”).hasRole(“ROLE_ADMIN”),也可以设置admin文件夹下的文件可以有多个角色来访问,写法如下:.antMatchers(“/admin**/**”).hasAnyRole(“ROLE_ADMIN”,”ROLE_USER”)
6.可以通过hasIpAddress来指定某一个ip可以访问该资源,假设只允许访问ip为210.210.210.210的请求获取admin下的资源,写法如下.antMatchers(“/admin/**”).hasIpAddress(“210.210.210.210”)
7.更多的权限控制方式参看下表:
8.这里我们还可以做更多的配置,参考如下代码:
http.authorizeRequests().anyRequest().authenticated().and().formLogin().loginPage("/login")//设置默认登录成功跳转页面.defaultSuccessUrl("/index").failureUrl("/login?error").permitAll().and()//开启cookie保存用户数据.rememberMe()//设置cookie有效期.tokenValiditySeconds(60 * 60 * 24 * 7)//设置cookie的私钥.key("").and().logout()//默认注销行为为logout,可以通过下面的方式来修改.logoutUrl("/logout")//设置注销成功后跳转页面,默认是跳转到登录页面.logoutSuccessUrl("").permitAll();
创建登录页面
在template文件夹中创建login.html页面,内容如下:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"/><title>登录</title><link rel="stylesheet" th:href="@{css/bootstrap.min.css}"/><style type="text/css">body {padding-top: 50px;}.starter-template {padding: 40px 15px;text-align: center;}</style>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top"><div class="container"><div class="navbar-header"><a class="navbar-brand" href="#">Spring Security演示</a></div><div id="navbar" class="collapse navbar-collapse"><ul class="nav navbar-nav"><li><a th:href="@{/}">首页</a></li><li><a th:href="@{http://www.baidu.com}">百度</a></li></ul></div></div>
</nav>
<div class="container"><div class="starter-template"><p th:if="${param.logout}" class="bg-warning">已注销</p><p th:if="${param.error}" class="bg-danger">有错误,请重试</p><h2>使用账号密码登录</h2><form class="form-signin" role="form" name="form" th:action="@{/login}" action="/login" method="post"><div class="form-group"><label for="username">账号</label><input type="text" class="form-control" name="username" value="" placeholder="账号"/></div><div class="form-group"><label for="password">密码</label><input type="password" class="form-control" name="password" placeholder="密码"/></div><input type="submit" id="login" value="Login" class="btn btn-primary"/></form></div>
</div>
</body>
</html>
创建登录成功后跳转页面
index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<head><meta charset="UTF-8"/><title sec:authentication="name"></title><link rel="stylesheet" th:href="@{css/bootstrap.min.css}"/><style type="text/css">body {padding-top: 50px;}.starter-template {padding: 40px 15px;text-align: center;}</style>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top"><div class="container"><div class="navbar-header"><a class="navbar-brand" href="#">Spring Security演示</a></div><div id="navbar" class="collapse navbar-collapse"><ul class="nav navbar-nav"><li><a th:href="@{/}">首页</a></li><li><a th:href="@{http://www.baidu.com}">百度</a></li></ul></div></div>
</nav>
<div class="container"><div class="starter-template"><h1 th:text="${msg.title}"></h1><p class="bg-primary" th:text="${msg.content}"></p><div sec:authorize="hasRole('ROLE_ADMIN')"><p class="bg-info" th:text="${msg.extraInfo}"></p></div><div sec:authorize="hasRole('ROLE_USER')"><p class="bg-info">无更多显示信息</p></div><form th:action="@{/logout}" method="post"><input type="submit" class="btn btn-primary" value="注销"/></form></div>
</div>
</body>
</html>
这里有如下几个问题需要说明:
1.在html标签中我们引入的Spring Security
2.通过sec:authentication=”name”我们可以获取当前用户名
3.sec:authorize="hasRole('ROLE_ADMIN')表示当前用户角色为ROLE_ADMIN的话显示里边的内容
4.sec:authorize="hasRole('ROLE_USER')表示当前用户角色为ROLE_USER的话显示该DIV里边的内容
添加控制器
package com.wangh.springboot_security.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import com.wangh.springboot_security.model.Msg;@Controller
public class HomeController {@RequestMapping("/")public String index(Model model) {Msg msg = new Msg("标题", "内容", "额外信息,只对管理员显示");model.addAttribute("msg", msg);return "index";}
}
测试
访问http://localhost:8080/自动跳转到http://localhost:8080/login
使用正确用户和错误用户分别登陆,可以看出正常运行。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- android 中使用SharedPreferences进行注册登录
android中通过SharedPreferences方法实现用户的注册登录是比较方便的,在注册时,首先通过PreferenceManager.getDefaultSharedPreferences(test_register.this)得到SharedPreferences对象,再通过这个对象调用edit方法得到编译器对象,然后再向编译器对象中添加数据,数据是以…...
2024/4/21 14:57:51 - 安装Openface,实现人脸比对
安装Python基础类库 pip install numpy scipy pandas pip install scikit-learn scikit-image 显示已安装类库执行命令pip list安装OpenCV 2.4.11 安装文档 http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html 下载源代码 https://githu…...
2024/4/18 16:46:07 - 给您的ibook换个颜色--同样适用于其他本本哦
点击查看...
2024/4/16 22:19:58 - Kotlin 第十四章:函数
Kotlin 第十四章:函数在前面的文章中也是简单的学习过函数相关的知识,这篇文章,我跟大家一起来具体的学习一下函数相关的内容。函数声明在 Kotlin 中用关键字 fun 声明函数:fun double(x: Int): Int {}函数用法通过传统的方法调用函数val result = double(2) 通过 . 调用成…...
2024/5/8 16:00:20 - 编程书籍下载
http://www.ibook8.com/Software/Catalog16/24534.html...
2024/5/8 20:36:02 - SpringSecurity自定义异常处理
以下为SpringSecurity默认自带的异常处理机制 两个重要的异常类 1. AccessDeniedException 该异常实现了很多子类。子类都是涉及到权限校验问题的。 2. AuthenticationEntryPoint 同样该异常类也实现了很多子类。springSecurity把异常划分的很细。概括来说都是身份校验问题…...
2024/5/8 16:24:36 - SpringBoot整合SpringSecurity进行认证授权
一、SpringSecurity工作原理如果对Spring-Security工作原理还不太清楚的的同学可以访问我之前的博客SpringSecurity登录认证授权原理,写的很详细二、Springboot与SpringSecurity的整合1.用户类User实现UserDetails接口,并重写其方法@Table(name = "db_user") @Enti…...
2024/4/18 16:43:19 - wang zhi
http://www.ibook8.com/book/c.htm...
2024/4/17 2:07:51 - kotlin引入配置
kotlin 配置首先下载插件 setting---->Plugins--->Browse 下载kotlin插件 然后配置gradle:project build.gradle文件里:buildscript {ext.kotlin_version= 1.1.2-5repositories {jcenter()}dependencies {classpath com.android.tools.build:gradle:2.2.2classpath&quo…...
2024/4/16 22:21:40 - 手势识别代码详细说明1(第二部分见下一篇)
源代码位置见链接 点击打开链接 第一节 整体框架的结构介绍 图像采集就是利用相机或者摄像头等图像采集设备对操作者的手势进行捕捉的过程,本实验系统采用图像的预处理就是对采集到的图像进行一些前期的简单处理,其目的是使图像适合后面的手势特征参量的提取过程。本实验系统…...
2024/4/16 22:22:09 - Android开发:“吹上天”的Kotlin协程 要不看下实战?
前言一转眼kotlin已经转正两年多,KT的各种语法糖、高阶函数、扩展函数等等。真的是让人爱不释手。一点都不吹牛逼,刚开始用Kotlin的时候,我完全不知道 协程 这个概念。后来记得有个朋友问我说:你知道协程吗?我说我肯定知道啊,我从上大学的时候就一直在用,买车票什么的都…...
2024/4/16 22:21:40 - spring security起步三:自定义登录配置与form-login属性详解
在上一篇博客spring security起步二:自定义登录页中我们实现了如何自定义登录页,但是还存在很多问题: 1.spring security如何对登录请求进行拦截 2.登录成功后如何跳转 3.登录失败后如何跳转form-login属性详解form-login是spring security命名空间配置登录相关信息的标签…...
2024/5/5 18:44:53 - iBook导入PDF格式的电子书
iBook导入PDF格式的电子书和导入 epub 格式的电子书一样,将 PDF 格式的电子书拖到 iTunes 的资料库里面就可以了。拖进去之后,可能会发现资料库下的书籍(图书)列表里面没有刚刚拖进去的PDF电子书,原因很简单,iTunes 还不知道这个格式的文档是书籍。解决方法:选择 “资料…...
2024/4/30 6:19:25 - 拒绝失控拒绝混乱:使用 vs code + git + beyond compare 搭建远程服务端编程环境
一、引言 写这篇文章的初衷在于,我之前曾经写过同样雷同标题的另一篇博客文章: 拒绝失控拒绝混乱:使用 vs code + git + sftp 插件搭建远程服务端编程环境 当时,我为了搭建一个友好方便的远端服务端编程环境,使用 vs code 当做文本编辑器,git 在本地对代码进行版本管理,…...
2024/5/6 8:15:19 - android读写Preference:
android读写Preference:package df.util.android;import android.app.Activity; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.util.Log;/*** Created by IntelliJ IDEA.* User: david* Date: 11-11-2* Time: 上午…...
2024/4/17 16:03:31 - SpringSecurity /favicon.ico请求 404问题
整合SpringSecurity的时候,发现输入正确用户名密码校验通过后,不是直接跳转到主页面,而是先去请求了"/favicon.ico"路径,如下图:这是因为SpringSecurity默认是先去获取浏览器标签页网站图标的,如果项目中根目录不存在文件"favicon.ico"则会报错解决方…...
2024/4/16 22:22:03 - 在偏好文件中存储数据
SharedPreferences对象使用常规的XML文件来存储数据,这些文件存储在应用程序的数据目录内。该XML文件的结构很简单,因为它只允许存储键/值对,不过Android API还提供了非常方便的抽象,允许开发者以类型安全的方式读写数据。 创建SharedPreferences对象最简单的方式是使用Pre…...
2024/3/31 22:31:59 - Android开发,Kotlin的了解与学习(八)-----kotlin与java的互相调用
本来呢,这一章是想开始kotlin在android中的用法了,后来发现,还有一个东西没有提到,那就是kotlin与java的互相代用。之前提到过java与kotlin是可以相互调用的,估计很多人就去尝试在kotlin的kt文件中,调用java的一些方法,发现还是有一些东西需要学的。 kotlin中使用jiava …...
2024/4/29 0:45:11 - 科技早点:XP退役是好事?拯救PC出货量下跌现状!
1XP退役是好事?拯救PC出货量下跌现状!4月8日,微软如期终止了对XP系统的支持服务。最近,全球信息咨询公司Gartner发布的一组数据显示2014年第一季度全球PC出货量与2013年第一季度相比减少1.7%,总计为7660万台,减幅与过去的七个季度相比已放缓。首席分析师北川美佳子表示“微…...
2024/4/16 22:21:40 - 入门学习_Kotlin
Overview 由于kotlin和Java之间的高兼容性,使得kotlin适用于服务端、客户端、前端以及数据科学等多个领域。同时,从Java转向kotlin的学习曲线也更加平滑。究其本质,kotlin和Java一样都是将源代码编译成字节码,从而可以运行在虚拟机之上。此外,对于服务端开发而言,kotlin支…...
2024/4/20 16:27:50
最新文章
- Springboot+Vue项目-基于Java+MySQL的流浪动物管理系统(附源码+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...
2024/5/8 21:43:37 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 解析大语言模型训练三阶段
大语言模型的训练过程一般包括3个阶段:预训练(Pre-training)、SFT(有监督的微调,Supervised-Finetuning)以及RLHF(基于人类反馈的强化学习,Reinforcement Learning from Human Feedb…...
2024/5/5 18:48:29 - OpenHarmony开发-连接开发板调试应用
在 OpenHarmony 开发过程中,连接开发板进行应用调试是一个关键步骤,只有在真实的硬件环境下,我们才能测试出应用更多的潜在问题,以便后续我们进行优化。本文详细介绍了连接开发板调试 OpenHarmony 应用的操作步骤。 首先…...
2024/5/8 15:56:24 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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