在本教程中,我们会写一个简单的、仅仅输出一些内容命令行程序,从而对Shiro有一个大体的感觉。

一、准备工作

本教程需要Java1.5+,并且我们用Maven生成项目,当然Maven不是必须的,你也可以通过导入Shiro jar包的方式、或使用Ant、Ivy,喜欢哪种就用哪种。

开始之前,确定你的Maven版本为2.2.1+(如果你用的是Maven的话),用mvn --version确定Maven的版本。

现在,我们将正式开始。首先新建一个文件夹,比如说shiro-tutorial,然后将下面的Maven pom.xml文件放到该文件夹下。

pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2     <project xmlns="http://maven.apache.org/POM/4.0.0"
 3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 5 
 6     <modelVersion>4.0.0</modelVersion>
 7     <groupId>org.apache.shiro.tutorials</groupId>
 8     <artifactId>shiro-tutorial</artifactId>
 9     <version>1.0.0-SNAPSHOT</version>
10     <name>First Apache Shiro Application</name>
11     <packaging>jar</packaging>
12 
13     <properties>
14         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15     </properties>
16 
17     <build>
18         <plugins>
19             <plugin>
20                 <groupId>org.apache.maven.plugins</groupId>
21                 <artifactId>maven-compiler-plugin</artifactId>
22                 <version>2.0.2</version>
23                 <configuration>
24                     <source>1.5</source>
25                     <target>1.5</target>
26                     <encoding>${project.build.sourceEncoding}</encoding>
27                 </configuration>
28             </plugin>
29 
30         <!-- This plugin is only to test run our little application.  It is not
31              needed in most Shiro-enabled applications: -->
32             <plugin>
33                 <groupId>org.codehaus.mojo</groupId>
34                 <artifactId>exec-maven-plugin</artifactId>
35                 <version>1.1</version>
36                 <executions>
37                     <execution>
38                         <goals>
39                             <goal>java</goal>
40                         </goals>
41                     </execution>
42                 </executions>
43                 <configuration>
44                     <classpathScope>test</classpathScope>
45                     <mainClass>Tutorial</mainClass>
46                 </configuration>
47             </plugin>
48         </plugins>
49     </build>
50 
51     <dependencies>
52         <dependency>
53             <groupId>org.apache.shiro</groupId>
54             <artifactId>shiro-core</artifactId>
55             <version>1.1.0</version>
56         </dependency>
57         <!-- Shiro uses SLF4J for logging.  We'll use the 'simple' binding
58              in this example app.  See http://www.slf4j.org for more info. -->
59         <dependency>
60             <groupId>org.slf4j</groupId>
61             <artifactId>slf4j-simple</artifactId>
62             <version>1.6.1</version>
63             <scope>test</scope>
64         </dependency>
65     </dependencies>
66 
67 </project>

二、The Tutorial class

由于我们的目的是创建一个命令行程序,因此我们需要先新建一个具有public static void main(String[] args)的Java类。

在和pom.xml所处的同一目录下,创建src/main/java子文件夹。在src/main/java文件夹下创建Tutorial.java文件,文件内容如下:

src/main/java/Tutorial.java

 1 import org.apache.shiro.SecurityUtils;
 2 import org.apache.shiro.authc.*;
 3 import org.apache.shiro.config.IniSecurityManagerFactory;
 4 import org.apache.shiro.mgt.SecurityManager;
 5 import org.apache.shiro.session.Session;
 6 import org.apache.shiro.subject.Subject;
 7 import org.apache.shiro.util.Factory;
 8 import org.slf4j.Logger;
 9 import org.slf4j.LoggerFactory;
10 
11 public class Tutorial {
12 
13     private static final transient Logger log = LoggerFactory.getLogger(Tutorial.class);
14 
15     public static void main(String[] args) {
16         log.info("My First Apache Shiro Application");
17         System.exit(0);
18     }
19 }

在往下进行之前,先测试一下是否可以运行。

三、测试运行

首先进入项目根目录(本教程为shiro-tutorial目录,即pom.xml所在的目录),打开控制台,输入命令:

mvn compile exec:java

然后你就会看到这个小程序运行起来,并且有如下类似的输出:

Run the Application
lhazlewood:~/projects/shiro-tutorial$ mvn compile exec:java... a bunch of Maven output ...1 [Tutorial.main()] INFO Tutorial - My First Apache Shiro Application
lhazlewood:~/projects/shiro-tutorial\$

现在我们已经验证了程序可以运行,接下来让我们使用Shiro。每次改变程序后,都可以运行mvn compile exec:java运行程序。

四、使用Shiro

在Shiro中有一个非常重要的组件--SecurityManager,Shiro的所有功能几乎都与这个组件相关。这样Java security类似,但是和java.lang.SecurityManager是不一样的。

我们会在后续教程中对SecurityManager做详细介绍。但是现在我们就要明确一点:SecurityManager是Shrio的核心组件,并且任何一个应用都要有一个SecurityManager才可以使用Shiro的其他功能。所有,在本教程中必须要做的事就是实例化一个SecurityManager。

五、配置

即使我们可以直接实例化一个SecurityManager,然而SecurityManager还是有比较多的配置和内部组件的,直接用java代码配置这些内容比较麻烦。通过配置文件进行配置会比较简单。

Shiro提供了一个默认的‘common denominator’,这是一个简单的文本配置文件(INI格式)。与XML格式相比,INI格式更加易读、易用并且几乎不需要任何依赖。INI格式可以轻松的配置SecurityManager。

事实上,由于Shiro完全兼容了JavaBeans,所以Shiro可以用XML、YAML、JSON、Groovy等很多格式进行配置。

下面我们用INI文件配置本教程的SecurityManager。首先,在pom.xml所在文件夹下创建src/main/resources文件夹,然后在src/main/resources文件夹下新建一个名为shiro.ini的文件,该文件内容如下:

src/main/resources/shiro.ini

 1 # =============================================================================
 2 # Tutorial INI configuration
 3 #
 4 # Usernames/passwords are based on the classic Mel Brooks' film "Spaceballs" :)
 5 # =============================================================================
 6 
 7 # -----------------------------------------------------------------------------
 8 # Users and their (optional) assigned roles
 9 # username = password, role1, role2, ..., roleN
10 # -----------------------------------------------------------------------------
11 [users]
12 root = secret, admin
13 guest = guest, guest
14 presidentskroob = 12345, president
15 darkhelmet = ludicrousspeed, darklord, schwartz
16 lonestarr = vespa, goodguy, schwartz
17 
18 # -----------------------------------------------------------------------------
19 # Roles with assigned permissions
20 # roleName = perm1, perm2, ..., permN
21 # -----------------------------------------------------------------------------
22 [roles]
23 admin = *
24 schwartz = lightsaber:*
25 goodguy = winnebago:drive:eagle5

如你所见,这个文件设置了一些基本的用户帐户,这对本教程已经足够了。在后续章节中,你将会学习如何使用更加复杂的用户数据源,如数据库、LDAP、ActiveDirectory等。

六、引用配置文件

现在我们已经有了一个INI文件,这样我们就可以创建一个SecurityManager对象了。将Tutorial.java文件中的main函数做如下改变:

public static void main(String[] args) {log.info("My First Apache Shiro Application");//1.Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");//2.SecurityManager securityManager = factory.getInstance();//3.
    SecurityUtils.setSecurityManager(securityManager);System.exit(0);
}

现在,我们只用了三行代码就将Shiro引入到我们的项目中了。可以用mvn compile exec:java检测一下程序是否可以运行。

在上述代码中,我们做了三件事:

  1. 我们使用了Shiro的IniSecurityManagerFactory类读取shiro.ini文件。从这个类名我们可以看出Shiro使用率设计模式中的工厂模式。代码中的classpath前缀告诉shiro去哪里加载ini文件(支持的前缀还有url:,file:)
  2. factory.getInstance()函数解析ini文件并返回一个Securitymanager对象,该对象含有配置信息。
  3. 在本例中,我们将SecurityManager设置为一个静态的,实现了单例模式,可以通过java虚拟机获得。然而如果要在多个应用中使用shiro,这样做就不行了。从而在比较复杂的大型应用中,我们通常将SecurityManager放在一块应用内存中,如web应用中的ServletContec或Spring、Guice或JBoss DI容器。

七、使用Shiro

现在SecurityManager已经设置好了,我们终于可以做一些真正地与安全相关的操作了、

当我们考虑应用的安全性时,通常会遇到的问题是“当前用户是谁?”,“当前用户可以做什么?”所以,应用的安全性工作主要建立在当前用户之上。在shiro API中用Subject这个含义更广的概念代替当前用户这个概念。

几乎在任何环境中,你都可以通过下述代码获得当前正在执行程序的用户。

Subject currentUser = SecurityUtils.getSubject();

使用SecurityUtils.getSubject方法,我们可以获得当前正在执行程序的Subject。我们并不称之为前正在执行程序的用户,因为用户通常是指人,而Subject可以指人、进程、计划任务、守护进程等。准确的说,Subject指的是“当前和软件交互的事物”。在多数场景中,你可以将Subject粗暴地认为是用户。

在一个独立的程序中,getSubject()函数基于应用内存中的用户数据返回一个Subject,在一个服务器环境中(如web应用),Subject通常是基于与当前进程有关的用户数据或是来到的请求。

既然我们已经有了Subject,我们可以拿它来做什么?

你可以获取当前Session并存储一些东西。

Session session = currentUser.getSession();
session.setAttribute( "someKey", "aValue" );

这里的Session是基于Shiro的,它的功能与HttpSession类似,但是有一个巨大的不同:它不需要HTTP环境!

如果在web应用中部署shiro,则Session默认就是基于HttpSession的。但是在非web应用中,比如本教程,Shiro会自动用它的Enterprise Session Managerment。这样你就可以使用一样的API而不用管部署环境是什么了。

现在我们已经获得了Subject和它的Session,那么怎么用这些东西去检测Subject是否具有某权限、某许可呢?

我们只能对当前用户检测这些东西。我们的Subject对象就是当前用户,但是Subject是谁?不知道,它是匿名的,除非它至少登录过一次,否则我们无从得知Subject是谁。所以,我们让Subject登录:

 1 if ( !currentUser.isAuthenticated() ) {
 2     //collect user principals and credentials in a gui specific manner
 3     //such as username/password html form, X509 certificate, OpenID, etc.
 4     //We'll use the username/password example here since it is the most common.
 5     UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
 6 
 7     //this is all you have to do to support 'remember me' (no config - built in!):
 8     token.setRememberMe(true);
 9 
10     currentUser.login(token);
11 }

现在,Subject已经登录了。

如果登录失败,我们可以捕获异常并且做相应处理。

 1 try {
 2     currentUser.login( token );
 3     //if no exception, that's it, we're done!
 4 } catch ( UnknownAccountException uae ) {
 5     //username wasn't in the system, show them an error message?
 6 } catch ( IncorrectCredentialsException ice ) {
 7     //password didn't match, try again?
 8 } catch ( LockedAccountException lae ) {
 9     //account for that username is locked - can't login.  Show them a message?
10 }
11     ... more types exceptions to check if you want ...
12 } catch ( AuthenticationException ae ) {
13     //unexpected condition - error?
14 }

这里有很多不同类型的异常,你也可以自定义自己的异常。

到这一步,我们已经有了一个登录过的用户,我们可以来做些什么呢?

我们来看看它是谁:

//print their identifying principal (in this case, a username): 
log.info( "User [" + currentUser.getPrincipal() + "] logged in successfully." );

我们也可以检测一下它有没有某些角色:

if ( currentUser.hasRole( "schwartz" ) ) {log.info("May the Schwartz be with you!" );
} else {log.info( "Hello, mere mortal." );
}

我们也可以检测它是否被允许访问某些实体。

if ( currentUser.isPermitted( "lightsaber:weild" ) ) {log.info("You may use a lightsaber ring.  Use it wisely.");
} else {log.info("Sorry, lightsaber rings are for schwartz masters only.");
}

我们也可以进行一些insstance-level(实例级别)的许可检测。即检测用户是否被允许访问某些实例。

if ( currentUser.isPermitted( "winnebago:drive:eagle5" ) ) {log.info("You are permitted to 'drive' the 'winnebago' with license plate (id) 'eagle5'.  " +"Here are the keys - have fun!");
} else {log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
}

最后,用户可以登出系统。

currentUser.logout(); //removes all identifying information and invalidates their session too.

八、Tutorial Class文件的最终内容

Final src/main/java/Tutorial.java

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Tutorial {private static final transient Logger log = LoggerFactory.getLogger(Tutorial.class);public static void main(String[] args) {log.info("My First Apache Shiro Application");Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");SecurityManager securityManager = factory.getInstance();SecurityUtils.setSecurityManager(securityManager);// get the currently executing user:Subject currentUser = SecurityUtils.getSubject();// Do some stuff with a Session (no need for a web or EJB container!!!)Session session = currentUser.getSession();session.setAttribute("someKey", "aValue");String value = (String) session.getAttribute("someKey");if (value.equals("aValue")) {log.info("Retrieved the correct value! [" + value + "]");}// let's login the current user so we can check against roles and permissions:if (!currentUser.isAuthenticated()) {UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");token.setRememberMe(true);try {currentUser.login(token);} catch (UnknownAccountException uae) {log.info("There is no user with username of " + token.getPrincipal());} catch (IncorrectCredentialsException ice) {log.info("Password for account " + token.getPrincipal() + " was incorrect!");} catch (LockedAccountException lae) {log.info("The account for username " + token.getPrincipal() + " is locked.  " +"Please contact your administrator to unlock it.");}// ... catch more exceptions here (maybe custom ones specific to your application?catch (AuthenticationException ae) {//unexpected condition?  error?
            }}//say who they are://print their identifying principal (in this case, a username):log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");//test a role:if (currentUser.hasRole("schwartz")) {log.info("May the Schwartz be with you!");} else {log.info("Hello, mere mortal.");}//test a typed permission (not instance-level)if (currentUser.isPermitted("lightsaber:weild")) {log.info("You may use a lightsaber ring.  Use it wisely.");} else {log.info("Sorry, lightsaber rings are for schwartz masters only.");}//a (very powerful) Instance Level permission:if (currentUser.isPermitted("winnebago:drive:eagle5")) {log.info("You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'.  " +"Here are the keys - have fun!");} else {log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");}//all done - log out!
        currentUser.logout();System.exit(0);}
}

 

九、总结

希望通过本教程,你可以知道如何设置shiro,并且了解Subject和SecurityManager这两个基本概念。

但是这只是一个非常非常简单的应用。你可能会问“如果我不想要INI而想用更加复杂的数据源该怎么做?”

为了解答这个问题,我们需要更加深入地了解一下shiro的结构,我门将在后面的章节中学习。

转载于:https://www.cnblogs.com/hf-z/p/6020896.html

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

相关文章

  1. 32位16进制转换为10进制数

    public class Trans2Ten {public static void main(String[] args) {long l = sixteen2ten("11e1-c418-a000039f-baac-7596f0d041ff");System.out.println("十进制:" + l);}public static long sixteen2ten(String str) {long result = 0;String a = &quo…...

    2024/4/19 18:03:48
  2. Win7下缩小任务栏宽度

    1.美化前2.美化后侧边栏明显变窄(时间显示略有欠缺)用注册表和应用程序美化任务栏,为窗口腾出更大的办公空间。 下列代码粘贴到文本文件中,改为.bat文件格式。D:\TaskbarTool\WIN7\Autohide.exe net stop uxsms net start uxsms D:\TaskbarTool\WIN7\Autohide.exe //D:\Taskb…...

    2024/4/14 22:49:26
  3. poj题目详细分类及算法推荐题目

    DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 1027 Human Gene Functions 简单题 1037 Gridland 简单题 1052 Algernon s Noxious Emissions 简单题 1409 Communication System …...

    2024/4/14 22:49:24
  4. 算法竞赛入门经典第三章总结(python实现)

    #开灯问题 def N_lamps(n,k):L = [0]*(n+1)for i in range(1,k+1):factor = 1while(factor*i<=n):L[factor*i] = 1-L[factor*i]#1代表开factor += 1for k,i in enumerate (L):if(i==1):print(k, ,end = )###没啥好说的,简单的模拟 #蛇形矩阵 def snake_matrix(n):L = [[0]*n…...

    2024/4/14 22:49:23
  5. 【基于url权限管理 shiro(一)】--基础

    只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括用户认证和授权两部分。用户认证 1.概念 用户认证,用户去访问系统,系统要验证用户身份的合法性。最常用的…...

    2024/4/14 21:56:29
  6. ArcGIS Enterprise部署介绍

    ArcGIS Enterprise一共有四个组件,分别是Server、DataStore、Portal和WebAdaptor,根据实际的需求,是可以将ArcGIS Enterprise做比如集群部署、高可用部署、分布式部署等等,下面将一一来介绍注:本文只做架构图的展示,不做详细配置的讲解,配置可以参考不管是分布式部署、还…...

    2024/4/17 0:11:19
  7. "超时时间已到。在操作完成之前超时时间已过或服务器未响应"解决办法

    报错:“超时时间已到。在操作完成之前超时时间已过或服务器未响应” 解决办法如下: using (SqlConnection connection = new SqlConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); …...

    2024/4/23 20:43:38
  8. java 10进制和16进制的相互转换

    16进制转10进制 思路:求得每一位对应的16的幂,然后乘以这一位的数值,然后把求得的乘积相加import java.util.*; public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){String hex=sc.next().substring(2).to…...

    2024/4/20 1:35:55
  9. 321影音 多功能播放器

    本项目由杨光福老师 即 IT蓝豹创始人开发的APP. 大家可以下载使用:http://www.itlanbao.com/code/20151203/10000/100675.html阿福老师在2012年业余时间写的播放器,当时还荣获最佳应用奖微博http://t.qq.com/yangguangfu 321影音的简介: 321影音是android手机上功能最多…...

    2024/4/14 22:49:23
  10. Win7系统安装软件提示"不是有效的win32应用程序"的解决方法

    用户在Win7系统中安装软件时,时常会出现一些64bit和86bit的提示,这个和系统32位与64位有关,笔者便不多说。还有一些在Win7系统中比较少见的提示:“不是有效的Win32程序”会偶尔出现,这类错误发生的原因是为软件不完整或安装不完整,以及.exe文件关联被改变了,出现这种问题…...

    2024/4/14 22:49:21
  11. 十进制、十六进制转换(javascript实现)

    十进制整数转成十六进制数 /* 输入:dec:十进制整数 输出hex:返回“0x"开头的转换后的字符串 原理: 十进制数通过“&"位操作转换成二进制,然后通过4bit取出为十六进制。 例如: dec: 40000,二进制是‭1001110001000000‬,先转换成“”0x04C9",然后倒序转换…...

    2024/4/23 1:58:31
  12. 手把手教你搭建DHCP服务器

    目录DHCP实现原理 DHCP定义 DHCP分配方式 DHCP工作过程 初次登录 重新登录 更新租约搭建DHCP服务器 实验目的 实验环境 实验步骤 实验结果DHCP实现原理DHCP定义DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作。它是一…...

    2024/4/14 22:49:16
  13. VirtualBox引起Win7重启

    这篇文章之前的名字是:VirtualBox内存分配偏小导致引起Win7重启,现在才发现自己误导了很多人。 之前的出现的状况是,在VirtualBox虚拟机里面,安装了两台虚拟机,在使用的过程中经常出现宿主主机Win7自动重启的情况。我一直认为是内存不足的原因引起系统重启。 在VirtualBox…...

    2024/4/14 22:49:13
  14. mysql-5.7.20-winx64.zip 安装

    1. 下载mysql-5.7.20-winx64.zip https://dev.mysql.com/downloads/mysql/ 2.解压到指定文件夹 修改配置文件3. 新建一个my.ini文件 增加如下内容: [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] skip-grant-tables #设置3306端口 port = 3306 # 设…...

    2024/4/14 22:49:12
  15. 怎么选择合适的云服务器,怎么判断云服务器的好坏大小?

    怎么选择合适的云服务器,怎么判断云服务器的好坏大小? 题主的问题可以理解为两个问题: 1、怎么选择合适的云服务器平台? 2、选择什么配置的服务器? 对于第二个问题,选择什么配置的云服务器,这个要根据应用的需求、应用场景及设计的并发人数来进行综合分析,来推荐合适的…...

    2024/4/19 12:47:43
  16. K近邻算法

    K 最近邻 (k-Nearest Neighbor,KNN) 分类算法 利用训练数据集对特征向量空间进行划分 三要素: k值的选择、距离度量、分类决策规则k近邻算法(1)给定距离度量,在训练集T中找到与x最近邻的k个点 涵盖这k个点的x领域记作Nk(x); (2)在Nk(x)中根据分类决策规则(如多数表决)决定x的…...

    2024/4/14 22:49:10
  17. 【分享】3D定制女仆1+2(CM3D)【汉化硬盘版+日文硬盘版】+VNR内嵌翻译

    于カスタムメイド3D(3D定制女仆)Ver1.25+VP+SP+NP11+PP+FP+SPII+HP+KT|解码|步兵|存档|MOD|补丁戏原名:カスタムメイド3D别名:3D定制女仆制作公司: KISS 初版正式发售日:2011-01-28载体类型: PC平台_DVD-ROM 分辨率: 1024*768 语音:全语音 备注: 女主角自设定+女仆养成…...

    2024/4/20 19:35:22
  18. 搭建自己的流媒体服务器-(1)服务器搭建篇

    搭建自己的流媒体服务器-(1)服务器搭建篇http://download.csdn.net/download/katdriver/3272133http://blog.csdn.net/haolipengzhanshen/article/details/50810066标签: ios流媒体服务器服务器 2016-02-19 15:09 121人阅读 评论(0) 收藏 举报分类:ios(2) 版权声明:本文为…...

    2024/4/20 0:29:57
  19. matlab中基本操作(对已知数组16进制转化为10进制)

    老师给了我一个txt,里面有上千个16进制数,每个数间有一个空格,要求将这个txt里的数全部转化为10进制数,并存在一个txt文档里。不知哪位大侠可以帮助我。。。如果教我将这些点画图重谢!(不画也行)txt里16进制部分数的格式如下: 7B 05 7A 05 7B 05 79 05 7B 05 7B 05 7B 0…...

    2024/4/18 6:15:43
  20. Shiro入门,Shiro实战 系列教程第三篇

    Shiro入门,Shiro实战 系列教程第二篇 :Springboot中Shiro的应用实战声明:转载,须注明来源作者 kone 并附上本文链接1:准备sql2:基本的工程架构3:开始整合shiro3.1 spring和shiro的整合依赖3.2 修改登录方法3.3 自定义realm3.4 Shiro的配置(1) yml:(2) 自定义的sessionMa…...

    2024/4/14 22:49:05

最新文章

  1. windows如何写一个删除文件夹的bat脚本

    echo off set "folderC:\Users\Adminis\AppData\Local\TwinWaterConservancy\Saved"if exist "%folder%" (rd /s /q "%folder%"echo 删除完成&#xff01; ) else (echo 文件夹不存在&#xff0c;无需删除。 )pause...

    2024/4/26 11:22:55
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. ROS2高效学习第十章 -- ros2 高级组件之大型项目中的 launch 其二

    ros2 高级组件之大型项目中的 launch 1 前言和资料2 正文2.1 启动 turtlesim&#xff0c;生成一个 turtle &#xff0c;设置背景色2.2 使用 event handler 重写上节的样例2.3 turtle_tf_mimic_rviz_launch 样例 3 总结 1 前言和资料 早在ROS2高效学习第四章 – ros2 topic 编程…...

    2024/4/25 7:34:49
  4. 【Java】假如把集合体系看作购物中心

    购物中心入口&#xff1a;Java集合框架 “Java集合广场”的购物中心&#xff0c;这是一个集合了各种奇特商店的地方&#xff0c;每个商店都充满了不同的宝藏&#xff08;数据结构&#xff09;。 一楼&#xff1a;基础集合区 - Collection接口 一楼是基础集合区&#xff0c;这…...

    2024/4/24 3:27:38
  5. 【外汇早评】美通胀数据走低,美元调整

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

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

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

    2024/4/25 18:39:24
  7. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/25 18:38:39
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/4/25 18:39:23
  9. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

    2024/4/25 18:39:22
  11. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/25 18:39:20
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

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

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

    2024/4/25 13:39:44
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

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

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

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

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

    2024/4/25 0:00:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/25 4:19:21
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

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

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

    2024/4/25 18:39:12
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

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

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

    2024/4/25 18:38:58
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/25 18:38:57
  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