Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。上个月写了一个在线教育的项目用到了shiro权限控制,这几天又复盘了一下,对其进行了深入探究,来总结一下。

下面所总结的有关shiro的代码已经传到我的github上,可以访问下面的链接:

https://github.com/xujiankang6/shirotest

一、实现功能

1、完成了记住我功能

2、完成了密码加密功能

3、完成了根据shiro权限访问不同内容

4、完成了使用shiro的session进行保存

二、实现代码

1、引入shiro相关的依赖

我是前端使用了thymeleaf,所以需要引入下面shiro相关的依赖

<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.3.2</version>
</dependency>
<dependency><groupId>com.github.theborakompanioni</groupId><artifactId>thymeleaf-extras-shiro</artifactId><version>2.0.0</version>
</dependency>

2、自定义密码验证器

(1)这个类实现了shiro的SimpleCredentialsMatcher接口来重新密码验证方法

(2)同时写了加密的方法encrypt(String data),拿到前台传过来的密码后,使用该方法加密后与数据库的拿到的密码进行比对,返回ture或者fasle。

(3)当然,前台注册时,保存数据库的密码也需要用同样的形式把密码加密后再保存。

//验证密码 查找到了1该用户 自定义密码验证器
public class MyMatcher extends SimpleCredentialsMatcher {@Overridepublic boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;String pwd = encrypt(String.valueOf(usernamePasswordToken.getPassword()));String mysqlpwd = (String) info.getCredentials();return this.equals(pwd, mysqlpwd);}//将传进来的密码进行加密的方法private String encrypt(String data){String sha384Hex=new Sha384Hash(data).toBase64();return sha384Hex;}}

3、自定义realm

当密码验证通过后,就到了我们的自定义realm,在我们自定义realm中实现了AuthorizingRealm接口,将其方法进行重写,将各种权限对用户进行授权,同时对用户身份进行验证,代码如下,每一行代码具体含义十分详细了。

//登录及权限验证
public class MyRealm extends AuthorizingRealm {@AutowiredUserService us;//角色权限和对应权限添加//Authorization授权,将数据库中的角色和权限授权给输入的用户名@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {//获取登录的用户名String phone = (String) principalCollection.getPrimaryPrincipal();//到数据库里查询要授权的内容User user = us.querybyname(phone);//记录用户的所有角色和权限SimpleAuthorizationInfo simpleAuthorizationInfo=new SimpleAuthorizationInfo();//权限信息for(Role r:user.getRoles()){//将所有的角色信息添加进来。simpleAuthorizationInfo.addRole(r.getRname());for(Permission p:r.getPermissions()){//将此次遍历到的角色的所有权限拿到,添加·进来simpleAuthorizationInfo.addStringPermission(p.getPname());}}return simpleAuthorizationInfo;}//用户身份验证@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {//从token获取用户名,从主体传过来的认证信息中获取//加这一步的目的是在post请求时会先进入认证然后再到请求。if(authenticationToken.getPrincipal()==null){return null;}//获取用户的登录信息,用户名String phone=authenticationToken.getPrincipal().toString();//根据service调用用户名,查找用户的全部信息//通过用户名到数据库获取凭证User user=us.querybyname(phone);if(user==null){//这里返回会报出对应异常return  null;}else{//这里验证authenticationToken和simpleAuthenticationInfo的信息SimpleAuthenticationInfo simpleAuthenticationInfo=new SimpleAuthenticationInfo(phone,user.getUpwd().toString(),getName());return simpleAuthenticationInfo;}}

4、自定义记住我过滤器

该过滤器是为了实现记住我后,用户再次登陆不需要进行权限验证,就能到达首页,后面会介绍当不使用该过滤器的后果。

(1)该过滤器实现当用户通过isRemembered()登陆,没有通过isAuthenticated()登陆时拿到user的session信息,保证后面到达首页时候能拥有各种跟通过isAuthenticated()登陆时的session信息。

(2)过滤器完成了登陆条件的过滤,要么通过权限认证登陆成功,要么通过记住我登陆成功。

(3)在shiroconfig类中会进行shiro访问权限配置。

public class MyRememberFilter extends FormAuthenticationFilter {protected boolean isAccessAllowed(HttpServletRequest request, HttpServletResponse response, Object mappedValue){Subject subject=getSubject(request,response);if(!subject.isAuthenticated() && subject.isRemembered()){if(subject.getSession().getAttribute("user")==null &&subject.getPrincipal()!=null){subject.getSession().setAttribute("user",subject.getPrincipal());}}return subject.isAuthenticated() || subject.isRemembered();}
}

5、实现shiroConfig配置类

(1)配置密码验证器

 @Bean("credentialsMatcher")public CredentialsMatcher credentialsMatcher() {return new MyMatcher();}

(2)配置权限验证器

@Bean("myRealm")public MyRealm myRealm(@Qualifier("credentialsMatcher") CredentialsMatcher credentialsMatcher) {MyRealm myRealm = new MyRealm();//给权限验证器配置上自定义的密码验证器myRealm.setCredentialsMatcher(credentialsMatcher);return myRealm;}

(3)配置缓存验证器

    @Beanpublic CacheManager cacheManager(){return new MemoryConstrainedCacheManager();}

(4)配置记住我Cookie对象参数,rememberMeCookie()方法是设置Cookie的生成模版,比如cookie的name,cookie的有效时间等等。

    public SimpleCookie rememberMeCookie() {
//        这个参数是cookie的名称,对应前端的checkbox的name=rememberMeSimpleCookie simpleCookie = new SimpleCookie("rememberMe");
//        cookie生效时间为10秒simpleCookie.setMaxAge(10);return simpleCookie;}

(5)配置Cookie管理对象,rememberMeManager()方法是生成rememberMe管理器,而且要将这个rememberMe管理器设置到securityManager中

    @Beanpublic CookieRememberMeManager rememberMeManager() {CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();cookieRememberMeManager.setCookie(rememberMeCookie());return  cookieRememberMeManager;}

(6)注入自定义记住我过滤器

    @Beanpublic MyRememberFilter MyRememberFilter(){return new MyRememberFilter();}

(7)配置securityManager安全管理器,主要起到一个桥梁作用。

    @Bean("securityManager")public SecurityManager securityManager(@Qualifier("myRealm") MyRealm myRealm) {DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();//注入自定义myRealmdefaultWebSecurityManager.setRealm(myRealm);//注入自定义cacheManagerdefaultWebSecurityManager.setCacheManager(cacheManager());//注入记住我管理器defaultWebSecurityManager.setRememberMeManager(rememberMeManager());//注入自定义sessionManagerdefaultWebSecurityManager.setSessionManager(sessionManager());return defaultWebSecurityManager;}

(8)进行全局配置,Filter工厂。设置对应的过滤条件和跳转条件,有自定义的过滤器,有shiro认证成功后,失败后,退出后等跳转的页面,有静态页面等内容的权限范围。

    @Bean("shiroFilterFactoryBean")public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("securityManager") SecurityManager securityManager) {//shiro对象ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();bean.setSecurityManager(securityManager);bean.setLoginUrl("/login");bean.setSuccessUrl("/index");Map<String, Filter> filterMap=new LinkedHashMap<String,Filter>();filterMap.put("MyRememberFilter",MyRememberFilter());//MAPLinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();/*认证顺序是从上往下执行。*/linkedHashMap.put("/logout", "logout");//在这儿配置登出地址,不需要专门去写控制器。linkedHashMap.put("/static/**", "anon");//开启注册页面不需要权限linkedHashMap.put("/register", "anon");linkedHashMap.put("/saveregister", "anon");//验证phone唯一linkedHashMap.put("/solephone", "anon");//获取验证码linkedHashMap.put("/getcode", "anon");//验证码判断linkedHashMap.put("/comparecode", "anon");linkedHashMap.put("/websocket", "anon");//必须开启。linkedHashMap.put("/css/**", "anon");//不需要验证linkedHashMap.put("/js/**", "anon");//不需要验证//配置错误页面linkedHashMap.put("error", "anon");//不需要验证linkedHashMap.put("/img/**", "anon");//不需要验证linkedHashMap.put("/layui/**", "anon");//不需要验证linkedHashMap.put("/video/**", "anon");//不需要验证linkedHashMap.put("/bower_components/**", "anon");//不需要验证linkedHashMap.put("/plugins/**", "anon");//不需要验证linkedHashMap.put("/dist/**", "anon");//不需要验证linkedHashMap.put("/**", "user");//需要进行权限验证bean.setFilterChainDefinitionMap(linkedHashMap);return bean;}

(9)配置shiro的生命周期

    @Beanpublic LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {return new LifecycleBeanPostProcessor();}

(10)配置shiro注解是否生效

启动Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证

配置以下两个bean(DefaultAdvisorAutoProxyCreator和AuthorizationAttributeSourceAdvisor)即可实现此功能

@Beanpublic DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);return defaultAdvisorAutoProxyCreator;}@Beanpublic AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") SecurityManager securityManager) {AuthorizationAttributeSourceAdvisor sourceAdvisor = new AuthorizationAttributeSourceAdvisor();sourceAdvisor.setSecurityManager(securityManager);return sourceAdvisor;}

(11)配置前台的shiro标签,使其能够使用

前台是使用shiro结合thymeleaf实现细粒度权限控制的。

    @Beanpublic ShiroDialect shiroDialect() {return new ShiroDialect();}

6、用户登陆controller实现

(1)当用户第一次到达登陆页面时,通过get方式。

    @RequestMapping(value = "/login", method = RequestMethod.GET)public String login(@Param("phone") String phone, @Param("upwd") String upwd) {return "login";}

(2)用户提交登陆信息时,通过post方法。

    @RequestMapping(value = "/login", method = RequestMethod.POST)public ModelAndView login2(@Param("phone") String phone, @Param("upwd") String upwd) {ModelAndView m = new ModelAndView();//添加用户认证信息Subject subject = SecurityUtils.getSubject();UsernamePasswordToken uToken = new UsernamePasswordToken(phone, upwd);//实现记住我uToken.setRememberMe(true);try {//进行验证,报错返回首页,不报错到达成功页面。subject.login(uToken);} catch (UnknownAccountException e) {m.addObject("result", "用户不存在");m.setViewName("login");return m;} catch (IncorrectCredentialsException e) {m.addObject("result", "密码错误");m.setViewName("login");return m;}//将权限信息保存到session中User user = sd.querybyname(phone);List<Permission> permissions = new ArrayList<Permission>();for (Role role : user.getRoles()) {for (Permission permission : role.getPermissions()) {permissions.add(permission);}}Map<String, ArrayList<Permission>> map = new HashMap<String, ArrayList<Permission>>();for (Permission p : permissions) {String name = p.getPermission_group_name();if (!map.containsKey(name)) {ArrayList<Permission> mList = new ArrayList<Permission>();mList.add(p);map.put(name, mList);} else {ArrayList<Permission> pList = map.get(name);pList.add(p);map.put(name, pList);}}
//       保存到shiro的session中一些信息Session session = subject.getSession();
//        保存userinfo的基本信息int uid = user.getUid();UserInfo userInfo = sd.queryuserinfo(uid);//保存user信息session.setAttribute("user", user);
//shiro权限验证成功后跳转的界面m.setViewName("index");return m;}

7、用户前端登录页面

(1)部分代码

<div class="login-box-body"><p class="login-box-msg">登录更精彩!!!</p><form action="login" method="post"><div class="form-group has-feedback"><input type="phone" class="form-control" placeholder="请输入手机号" name="phone"><span class="glyphicon glyphicon-envelope form-control-feedback"></span></div><div class="form-group has-feedback"><input type="password" class="form-control" placeholder="请输入密码" name="upwd"><span class="glyphicon glyphicon-lock form-control-feedback"></span></div><div class="row"><div class="col-xs-8"><div class="checkbox icheck"><label><input type="checkbox" name="rememberMe"> 记住账户</label></div></div><!-- /.col --><div class="col-xs-4"><button type="submit" class="btn btn-primary btn-block btn-flat">登录</button><p th:text="${result}" style="color: red"></p></div><!-- /.col --></div></form><!-- /.social-auth-links --><a href="#">忘记密码?</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/register" class="text-center">注册</a></div><!-- /.login-box-body -->
</div>

(2)页面展示

8、前台使用shiro结合thymeleaf实现细粒度权限具体实现

<div class="description-block"><shiro:hasAnyRoles name="教员"><h5 class="description-header" th:text="${courses.size()}">35</h5></shiro:hasAnyRoles><shiro:hasAnyRoles name="管理员"><h5 class="description-header" >0</h5></shiro:hasAnyRoles><shiro:hasAnyRoles name="普通用户"><h5 class="description-header" >0</h5></shiro:hasAnyRoles><span class="description-text">课程数</span>
</div>

三、注意事项

1、记住我功能

(1)我们自定义记住我过滤器是为了在通过isRemember()登录时,能够得到和通过isAuthenticated()登录一样的信息,因为当我们通过isAuthenticated()登录时,我们获取了一下session信息,通过isRemember()登陆我们只拿到了账户密码信息,虽然能够登陆成功,但是由于缺少一些session信息,在到达首页时会报错,完成不了后续的操作。

(2)在shiroConfig中我们需要配置自定义的过滤器,并在该类的shiro全局配置中把该过滤器注入进来,让其功能实现。

Map<String, Filter> filterMap=new LinkedHashMap<String,Filter>();
filterMap.put("MyRememberFilter",MyRememberFilter());

(3)我们需要把shiroConfig全局配置中的下面的权限改为user权限

linkedHashMap.put("/**", "authc");

如果我们使用authc权限,我们通过记住我登陆成功后,关闭浏览器,再打开还是需要输入账户密码,不能直接到达首页,没有实现效果,因为isRemember()的权限是user权限,比authc权限低,所以通过记住我登陆后,shiro会觉得不安全,让再次输入密码,只有改为user权限才能实现,下次打开浏览器,不需要输入密码,直接登陆成功。

(4)但是使用user权限又会带来新的问题,我们对一些敏感的信息,不想让用户通过user权限看到,这时需要对此种页面使用authc权限,当到达这样的页面时,我们需要账户密码重新登陆一下。

2、密码加密功能

(1)我们必须在MyMathcher中对拿到的前台的密码进行加密后再与数据库中的密码进行比对。

(2)在注册时,我们需要用相同的加密算法对用户注册的密码进行加密保存的数据库中,通过shiro验证时,拿加密后的数据库中的密码与前台用户登录时的密码加密后进行比对。这样才能够实现权限验证。

(3)我只是使用了一种简单的算法,大家可以用加盐的MD5,自行操作。

四、总结

以上是我对shiro的深入理解,希望对小伙伴能有帮助,更多精彩请关注:

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

相关文章

  1. Shiro步步为营--Springboot开启身份验证

    项目的完整目录层次如下图所示。 项目地址&#xff1a;https://github.com/pengjunlee/shiro-authenticate.git 添加依赖与配置 在本工程中&#xff0c;Shiro使用了Ehchache作缓存&#xff0c;因此需要在工程POM文件中引入它们的Maven依赖。 <parent><groupId>o…...

    2024/4/21 13:42:19
  2. Spring Boot2整合Shiro(2):用 BCrypt 加密密码

    因为新项目没有继续用Shiro框架&#xff0c;再加上人比较懒&#xff0c;所以就没有再写新的关于 Shiro 的文章。但是今天发现已经有几个朋友在 GitHub 上的给示例项目加星&#xff0c;也有留言咨询的。我很高兴这篇文章能够帮到大家&#xff0c;也再次让我感受到把在工作中学到…...

    2024/4/25 2:34:10
  3. shiro使用(使用token)

    既然要做,就做的细致一点&#xff0c;对得起自己&#xff01; 为什么使用token&#xff0c;请看这里 解决思路&#xff1a; 1.增加一个过滤器&#xff0c;对每一个请求都进行token的校验。如果为登录请求&#xff0c;则可以放过。 2.将过滤器设置进shiro中。 第一步&#…...

    2024/4/21 13:42:18
  4. SpringBoot集成Shiro安全框架

    SpringBoot集成Shiro安全框架1.shiro的定义2.SpringBoot集成shiro的步骤3.完成的效果1.shiro的定义 1.shiro的作用 认证、授权、加密、会话管理、Web集成、缓存 2.shiro的名词 Authentication:身份认证/登录&#xff0c;验证用户是不是拥有相应的身份 Authorization&#x…...

    2024/4/21 13:42:17
  5. springboot集成shiro 实现权限控制

    shiro apache shiro 是一个轻量级的身份验证与授权框架&#xff0c;与spring security 相比较&#xff0c;简单易用&#xff0c;灵活性高&#xff0c;springboot本身是提供了对security的支持&#xff0c;毕竟是自家的东西。springboot暂时没有集成shiro&#xff0c;这得自己配…...

    2024/4/21 13:42:15
  6. Shiro步步为营--奇淫技巧

    目录 会话管理 启用会话管理 自定义SessionDAO 会话验证 关于缓存 记住我 认证VS记住我 启用记住我 会话管理 Shiro 提供了完整的企业级会话管理功能&#xff0c;不依赖于底层容器&#xff08;如web容器tomcat&#xff09;&#xff0c;不管 JavaSE 还是 JavaEE 环境都…...

    2024/4/21 13:42:14
  7. ssm整合shiro详解

    这里有详细的ssm整合shiro步骤,需要先搭建ssm框架&#xff0c;教程在 https://blog.csdn.net/qq_41150890/article/details/108419455 整合shiro&#xff1a; 1.在pom.xml中引入依赖 <!-- shiro --><!-- https://mvnrepository.com/artifact/org.apache.shiro/shi…...

    2024/4/21 13:42:14
  8. shiro 用法

    最近在做项目的时候需要用到shiro做认证和授权来管理资源 在网上看了很多文章&#xff0c;发现大多数都是把官方文档的简介摘抄一段&#xff0c;然后就开始贴代码&#xff0c;告诉你怎么怎么做&#xff0c;怎么怎么做 相信很多小伙伴即使是跟着那些示例代码做完配完&#xff…...

    2024/4/20 15:51:00
  9. 2 Apache Shiro 身份认证(登录)

    2.1 概述 身份认证通常需要提供“用户”身份ID和一些标识信息&#xff0c;如用户名、密码。 Shiro 中需要提供 principals&#xff08;身份&#xff09;和 credentials&#xff08;凭证&#xff09;用于验证用户身份。 principals 身份&#xff0c;即主体的标识属性&#x…...

    2024/4/20 4:45:47
  10. Shiro权限控制+整合shiro

    Shiro权限控制 0.1传统的权限认证方式 特点&#xff1a;为每个人单独的分配权限模块&#xff0c;能够实现权限控制&#xff0c;但是当公司人员庞大之后&#xff0c;非常难管理 上述权限控制如何设计表&#xff1f; 关系&#xff1a;员工和菜单权限的关系&#xff1a;多对多 …...

    2024/4/20 15:51:00
  11. 【Shiro】Shiro登录验证失败问题

    shiro登录验证一直失败&#xff1a; 原因&#xff1a; 在用户注册时&#xff0c;采用如下加密方法&#xff1a; /*** md5加密工具* param var* 要加密的字符串* param iterations* 加密次数* return*/ public static String encrypt(String var,int iterations){return new …...

    2024/4/20 15:50:57
  12. shiro

    shiro 权限管理 权限管理 权限管理分为认证和授权 认证 认证的基本概念 身份认证&#xff1a;校验用户是不是系统合法用户的过程&#xff08;登录&#xff09; 身份认证&#xff0c;就是判断一个用户是否为合法用户的处理过程。 最常用的简单身份认证方式是系统通过核对用…...

    2024/4/21 13:42:12
  13. Shiro————核心设计思想

    引言 以此篇博客为引&#xff0c;开启一个新的专栏分类——Shiro。 之前在工作中有比较快速的学习过Shiro安全框架&#xff0c;但经过一年的荒废&#xff0c;已经不是很熟悉了&#xff0c;通过这个系列&#xff0c;深入研究和学习Shiro的一些知识&#xff0c;填补安全管理方面…...

    2024/4/21 13:42:11
  14. Shiro 教程

    Shiro是apache提供的强大而灵活的开源安全框架&#xff0c;它主要用来处理身份认证&#xff0c;授权&#xff0c;企业会话管理和加密。 shiro功能&#xff1a;用户验证、用户执行访问权限控制、在任何环境下使用session API&#xff0c;如cs程序。可以使用多数据源如同时使用or…...

    2024/4/21 13:42:11
  15. springboo2.x权限 demo(shiro,sprng security,oauth2)

    原文发布于: http://blog.ztgreat.cn/article/70 前言 这是一篇关于权限方面的文章&#xff0c;这是去年的时候结合一些简单的项目&#xff0c;自己抽空瞎折腾的学习demo&#xff0c;进行了一定的整理&#xff0c;涉及的内容包括 spring boot 2.x&#xff0c;shiro&#xff0c…...

    2024/4/21 13:42:09
  16. Springboot Shiro的集成

    Springboot Shiro的集成 1.添加依赖 <shiro.version>1.4.0</shiro.version><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>${shiro.version}</version><...

    2024/4/21 13:42:08
  17. Shiro学习(17)OAuth2集成

    目前很多开放平台如新浪微博开放平台都在使用提供开放API接口供开发者使用&#xff0c;随之带来了第三方应用要到开放平台进行授权的问题&#xff0c;OAuth就是干这个的&#xff0c;OAuth2是OAuth协议的下一个版本&#xff0c;相比OAuth1&#xff0c;OAuth2整个授权流程更简单安…...

    2024/4/21 13:42:07
  18. Spring Boot Shiro 权限管理

    本来是打算接着写关于数据库方面&#xff0c;集成MyBatis的&#xff0c;刚好赶上朋友问到Shiro权限管理&#xff0c;就先总结下发出来了。 使用Shiro之前用在Spring MVC中&#xff0c;是通过XML文件进行配置。 既然现在在写Spring Boot的帖子&#xff0c;就将Shiro应用到Spri…...

    2024/4/21 13:42:07
  19. Shiro步步为营--如何优雅地与JWT集成

    目录 鉴权流程 项目搭建 pom.xml 配置Shiro 用户登录 LoginController.java ShiroRealm.java BaseResponse.java UserEntity.java 签发Token 再次请求 ArticleController.java JwtFilter.java JwtToken.java JwtRealm.java JwtCredentialsMatcher.java MultiR…...

    2024/4/21 13:42:05
  20. SpringBoot2.0,Thymeleaf与Shiro整合

    前言 在2017年年底发布的一篇博客中介绍了前后端分离的场景下&#xff0c;springboot与shiro整合&#xff0c;时隔一年多&#xff0c;springboot早已升级到2.X&#xff0c;前后端分离也慢慢回归一体化&#xff0c;于是有了这样一篇博客&#xff0c;本文主要介绍在前后端不分离…...

    2024/4/21 13:42:04

最新文章

  1. Docker-Compose概述与简单编排部署

    目录 前言 一、Docker-Compose 概述 1、Docker-Compose 概念 2、Docker-Compose 优缺点 2.1 Docker-Compose 优点 2.2 Docker-Compose 缺点 3、Docker-Compose与Docker-Swarm的区别 二、两大文件格式 1、YAML 文件格式 2、JOSON 文件格式 3、YAML 与 JOSON 格式的区…...

    2024/5/2 20:57:45
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 解决npm install安装node-sass包容易失败的问题

    具体问题如下&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: XXX3.4.0 npm ERR! Found: webpack5.31.2 npm ERR! node_modules/webpack npm ERR! peer webpack”^4.0.0 || ^5.0.0″ from html-…...

    2024/5/2 18:30:38
  4. 校园局域网钓鱼实例

    Hello &#xff01; 我是"我是小恒不会java" 本文仅作为针对普通同学眼中的网络安全&#xff0c;设计的钓鱼案例也是怎么简陋怎么来 注&#xff1a;本文不会外传代码&#xff0c;后端已停止使用&#xff0c;仅作为学习使用 基本原理 内网主机扫描DNS劫持前端模拟后端…...

    2024/5/1 14:18:37
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/5/2 9:28:15
  9. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

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

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

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

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

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

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

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

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

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

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

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

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

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

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

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

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

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

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

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

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/30 9:42:49
  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