首页 > 作文

SpringBoot Admin的简单使用的方法步骤

更新时间:2023-04-04 14:32:38 阅读: 评论:0

目录
一、快速入门1.1 springboot admin服务端的搭建1.2 springbootadmin client端搭建1.3 效果展示二、安全性2.1 admin-rver端安全加固2.2 admin-client端的安全三、小结

公司有个springboot项目需要加个监控,网上找了下发现大家都在推荐springbootadmin。springboot admin是开源社区孵化的项目,用于对springboot应用的管理和监控。springboot admin 分为服务端(spring-boot-admin-rver)和客户端(spring-boot-admin-client),服务端和客户端之间采用http通讯方式实现数据交互;单体项目中需要整合spring-boot-admin-client才能让应用被监控。在springcloud项目中,spring-boot-admin-rver 是直接从注册中心抓取应用信息,不需要每个微服务应用整合spring-boot-admin-client就可以实现应用的管理和监控。

官网参考链接:https://codecentric.github.io/spring-boot-admin/2.2.4/

本文只叙述springboot admin 管理和监控单体应用 ,不涉及springcloud相关的内容 。

一、快速入门

1.1 springboot admin服务端的搭建

(1) maven依赖说明 springboot版本

    <parent>        <groupid>org.springframework.boot</groupid>        <artifactid>spring-boot-starter-parent</artifactid>        <version>2.2.10.relea</version>        <relativepath/> <!-- lookup parent from repository -->    </parent>

添加springbootadmin rver依赖及springboot web 依赖

<dependency>        <groupid>org.springframework.boot</groupid>        <artifactid>spring-boot-starter-web</artifactid>    </dependency>    <!--这里由于我的springboot版本是2.2.10.relea,所以 springboot admin 也要用2.2.x版-->    <dependency>        <groupid>de.codecentric</groupid>        <artifactid>spring-boot-admin-starter-rver</artifactid>        <version>2.2.4</version>    </dependency>

(2)application.yml中配置端口

# 指定端口rver:port: 23333

(3)编写启动类并开启springbootadminrver

 package com.zcode.monitor.rver;    import de.codecentric.boot.admin.rver.config.enableadminrver;    import org.springframework.boot.springapplication;    import org.springframework.boot.autoconfigure.springbootapplication;    /**     * adminrverapplication     * @author zeng.xiao.yan     * @version 1.0     * @date 2020-11-12     */    @enableadminrver // 开启 springboot admin 服务端    @springbootapplication    public class adminrverapplication {        public static void main(string[] args) {            springapplication.run(adminrverapplication.class,args);        }    }

(4)浏览器访问测试 浏览器访问 http://localhost:23333/ 出现以下页面说明springboot admin服务端搭建成功

1.2 springbootadmin client端搭建

备注:所谓的 client端就是指我们需要被监控的应用端。这里我们写一个简单点的springboot web应用做演示

(1)maven依赖说明

springboot版本如下

<parent>        <groupid>org.springframework.boot</groupid>        <artifactid>spring-boot-starter-parent</artifactid>        <version>2.2.10.relea</version>        <relativepath/> <!-- lookup parent from repository -->    </parent>

添加springbootadmin client 依赖及springboot web 依赖。这里不需要添加springboot actuator 依赖,因为springbootadmin client里面已经包含了actuator相关依赖

   <dependency>            <groupid>org.springframework.boot</groupid>            <artifactid>spring-boot-starter-web</artifactid>        </dependency>        <!--这里由于我的springboot版本是2.2.10.relea,所以 springboot admin 也要用2.2.x版-->        <dependency>            <groupid>de.codecentric</groupid>     朵朵小语       <artifactid>spring-boot-admin-starter-client</artifactid>            <version>2.2.4</version>        </dependency>

(2) application.yml配置

在yml中需要 配置如下信息:

应用端口

开放端点用于springbootadmin 监控

配置应用名称(该名称会在springboot admin的管理页面显示)

配置ad劳动节手抄报资料min rver的地址

配置下日志文件的文件名和存放位置 (如果不配置则会看不到日志)

# 端口rver:  port: 9088#开放端点用于springboot admin的监控management:  endpoints:    web:      exposure:        include: '*'spring:  application:    name: admin-client # 给client应用取个名字  boot:    admin:      client:        url:  http://localhost:23333   #这里配置admin rver 的地址logging:  file:    name: admin-client.log  #配置生成日志文件名称

(3)写一个controller模拟一个普通的接口

通过浏览器访问这个接口就会打印日志,具体代码如下

  /**     * hellocontroller     *     * @author zeng.xiao.yan     * @version 1.0     * @date 2020-11-16     */    @slf4j    @restcontroller    @requestmapping("api")    public class hellocontroller {        private atomicinteger count = new atomicinteger(0);        @getmapping("hi")        private string sayhi() {            // 每次进来如打印下日志            log.info("{} 啪...我第{}次进来了.", localdatetime.now(),  count.addandget(1));            // 每次进来new 个大对象,便于监控观察堆内存变化            byte[] bytes = new byte[100*1024*1024];            log.info("new了 100mb");            return "hi springboot addmin " + localdatetime.now();        }    }

(4)写个启动类

启动类代码就很简单了,就是一个普通的springboot项目的启动类,上面没加其他注解。具体如下

@springbootapplicationpublic class adminclientapplication {    public static void main(string[] args) {        springapplication.run(adminclientapplication.class, args);    }}

1.3 效果展示

(1)已管理的应用会在应用墙上展示

当我们的admin-client项目启动后,在 admin-rver的管理页面的应用墙上就能看到admin-client这个应用了,具体可参考下图

(2)可查看应用的具体信息

在应用墙点击这个应用,我们可以看到这个应用的具体信息,如堆内存变化及线程数等。具体可参考下图

(3)日志查看及堆内存变化观察

请求我们在admin-client中写的模拟接口 http://localhost:9088/api/hi ,该接口请求一次则会输出日志,同时开辟100mb的堆内存空间。
请求多次后在网页上可以实时的看到日志如下图

由于我们直接new了100mb的大对象,此时可以查看细节中的堆内存变化;具体如下图

二、安全性

2.1 admin-rver端安全加固

这个springboot admin的管理后台如果没密码就能访问,那实在太不安全了,因此我们要给它加上登录的功能。

参考springboot admin的官方文档,我们可以在admin-rver端添加spring curity 相关依赖及就可以实现需要登录后才能访问网页管理面板。

官网参考链接为:/d/file/titlepic/

下面开始具体的改造

(1)admin-rver添加spring curity 相关依赖

  <!--springboot admin 安全相关-->        <dependency>            <groupid>org.springframework.boot</groupid>            <artifactid>spring-boot-starter-curity</artifactid>        </dependency>

(2)admin-rver 设置账号和中秋感谢信密码

在application.yml配置账号和密码

# 配置一个账号和密码spring:  curity:    ur:      name: admin      password: root123456

(3)admin-rver 添加一个spring curity 配置类

 @configuration    public class curitycureconfig extends webcurityconfigureradapter {        private final string admincontextpath;        public curitycureconfig(adminrverproperties adminrverproperties) {            this.admincontextpath = adminrverproperties.getcontextpath();        }        @override        protected void configure(httpcurity http) throws exception {            savedrequestawareauthenticationsuccesshandler successhandler = new savedrequestawareauthenticationsuccesshandler();            successhandler.ttargeturlparameter("redirectto");            successhandler.tdefaulttargeturl(admincontextpath + "/");            http.authorizerequests()                    //1.配置所有静态资源和登录页可以公开访问                    .antmatchers(admincontextpath + "/asts/**").permitall()                    .antmatchers(admincontextpath + "/login").permitall()                    .anyrequest().authenticated()                    .and()                    //2.配置登录和登出路径                    .formlogin().loginpage(admincontextpath + "/login").successhandler(successhandler).and()                    .logout().logouturl(admincontextpath + "/logout").and()                    //3.开启http basic支持,admin-client注册时需要使用                    .httpbasic().and()                    .csrf()                    //4.开启基于cookie的csrf保护                    .csrftokenrepository(cookiecsrftokenrepository.withhttponlyfal())                    //5.忽略这些路径的csrf保护以便admin-client注册                    .ignoringantmatchers(                            admincontextpath + "/instances",                            admincontextpath + "/actuator/**"                    );        }    }

(4)admin-rver 安全加固后访问测试

再次访问http://localhost:23333/ ,发现需要登录

当我们输入正确的账号密码登录后,情况如下图

这个时候的应用数居然变成了0了,在我们没进行安全加固时是有一个admin-client应用的,为什么就不见了? 原因是添加了账号密码认证后,admin-client端也需要配置下 admin-rver的账号和密码。

(5)admin-client 端设置 admin-rver的账号密码

admin-client 注册到 admin-rver时,admin-rver端有个http basic认证,通过了认证后 admin-client才能注册到 admin-rver上。 admin-client的application.yml中配置访问密码配置可参考下面代码

spring:  application:    name: admin-client # 给client应用取个名字  boot:    admin:      client:        url:  http://localhost:23333 #这里配置admin rver 的地址        # 配置 admin研究生课程班-rver的账号和密码        urname: admin         password: root123456

(6) 再次访问 admin-rver 管理后台 当我们登录后,终于再次看到了我们的admin-client这个应用

2.2 admin-client端的安全

admin-client端如果把actuator端点都暴露出来,是非常不安全的。因此我们可以添加spring curity对admin-client 也进行安全加固。

下面所有操作均在admin-client中进行

(1)添加spring curity依赖

   <!--spring curity-->        <dependency>            <groupid>org.springframework.boot</groupid>            <artifactid>spring-boot-starter-curity</artifactid>        </dependency>

(2)yml配置

yml中需要设置client的账号和密码,官网相关配置如下图所示

本次演示的admin-client的相关yml配置参考下面代码

spring:  application:    name: admin-client # 给client应用取个名字  boot:    admin:      client:        url:  http://localhost:23333 #这里配置admin rver 的地址        # 配置 admin-rver的账号和密码        urname: admin        password: root123456        instance:          metadata:            # 这里配置admin-client的账号和密码            ur.name: ${spring.curity.ur.name}            ur.password: ${spring.curity.ur.password}  # admin-client 的用户名和密码  curity:    ur:      name: clientadmin      password: 123456

(3)添加spring curity 配置类

为何要到配置送桂州严大夫同用南字?因为spring curity不配置时会把所有请求都拦截的,而我们这里只需要拦截监控端点/actuator/**即可。同时,官网中提到admin-rver访问admin-client时,也是采用http basic认证方式的;因此需要配置spring curity支持http basic认证方式。

  @configuration    @slf4j    public class springcurityactuatorconfig extends webcurityconfigureradapter {        public springcurityactuatorconfig() {            log.info("springcurityactuatorconfig... start");        }        @override        protected void configure(httpcurity http) throws exception {            //  这个配置只针对  /actuator/** 的请求生效            http.antmatcher("/actuator/**")                    // /actuator/下所有请求都要认证                    .authorizerequests().anyrequest().authenticated()                    // 启用httpbasic认证模式,当springboot admin-client 配置了密码时,                    // admin-rver走httpbasic的认证方式来拉取client的信息                    .and().httpbasic()                    // 禁用csrf                    .and().csrf().disable();        }    }

(4)效果展示

admin-rver端依旧能看到admin-client的信息,说明我们添加springcurity 后 admin-rver的监控管理功能正常,具体见下图

当我们去访问admin-client的监控端点http://localhost:9088/actuator/health 时,发现需要进行http basic认证;这也证明了我们的认证拦截只拦截了监控端点。效果如下图

(5)存在的问题

通过上面的一通配置,admin-client 添加 spring curity 对actuator的端点进行安全认证的功能是实现了,但也存在着问题。 当我们项目本来就是使用springcurity 安全框架进行认证和授权时。上述的配置就要做修改了。因为我们一般都不用httpbasic认证,而是用的表单登录认证。也就出现了配置多个spring curity的问题。虽然有这个问题,但是网上还是有解决方案的。

(6)多个spring curity共存方案

这个方案是在spring curity官方文档里面找到的 链接为: https://docs.spring.io/spring-curity/site/docs/5.3.5.relea/reference/html5/ 官网关键信息截图如下:

里面的重点就是通过添加order注解来指定多个spring curity的优先级

下面直接贴上我的代码;为了直观,我就在同一个类里面建了2个静态的spring curity配置类

/** * springcurity 表单和httpbasic 共存配置参考,写在一个类里面方便对比 * @author zeng.xiao.yan * @date 2020-11-11 * @version 1.0 */@slf4jpublic class springcurityconfig2 {    /*     * 这个表单和httpbasic 共存配置玩法,参考url如下:     *  官方url:https://docs.spring.io/spring-curity/site/docs/4.2.3.build-snapshot/reference/htmlsingle/#multiple-httpcurity     *  项目启动日志如下,可以看到创建了2条过滤链 * 2020-11-11 22:57:56.340  info 12692 --- [main] o.s.s.web.defaultcurityfilterchain: creating filter chain: ant [pattern='/actuator/**'], * 2020-11-11 22:57:56.344  info 12692 --- [main] o.s.s.web.defaultcurityfilterchain: creating filter chain: any request,     */    /**     * httpbasic 认证方式,只对/actuator/** 生效,由于设置了order,优先级会高于formloginwebcurityconfigureradapter     * @author zeng.xiao.yan     * @date 2020-11-11     * @version 1.0     */    @configuration    @order(1)    public static class httpbasiccurityconfigurationadapter extends webcurityconfigureradapter {        public httpbasiccurityconfigurationadapter() {            log.info("httpbasiccurityconfigurationadapter... start");        }        protected void configure(httpcurity http) throws exception {            //  这个配置只针对  /actuator/** 的请求生效            http.antmatcher("/actuator/**")                    // /actuator/下所有请求都要认证                    .authorizerequests().anyrequest().authenticated()                    // 启用httpbasic认证模式,当springboot admin-client 配置了密码时,                    // admin-rver走httpbasic的认证方式来拉取client的信息                    .and().httpbasic()                    // 禁用csrf                    .and().csrf().disable();        }    }    /**     * 表单登录认证方式配置,由于没有指定order,所以默认是最大2147483647,数值越大,优先级越低     * @author zeng.xiao.yan     * @date 2020-11-11     * @version 1.0     */    @configuration    public static class formloginwebcurityconfigureradapter extends webcurityconfigureradapter {                public formloginwebcurityconfigureradapter() {            log.info("formloginwebcurityconfigureradapter... start");        }        @override        protected void configure(httpcurity http) throws exception {            http.authorizerequests()                .anyrequest().authenticated()                .and()                .formlogin();        }    }}

添加完这个配置类后,记得把我们上面配置的springcurityactuatorconfig 这个类删除了,然后重启项目。效果如下:

访问http://localhost:9088/actuator/health ,则出现的是httpbasic认证的页面

访问 http://localhost:9088/api/hi,则出现的是spring curity 自带的表单登录页面

访问admin-rver 的管理页面,发现admin-client应用信息正常,说明本次修改的spring curity配置没有问题

三、小结

(1)本文介绍了springboot admin的简单使用,同时介绍了admin-rver端的安全配置和admin-client端的安全配置

(2)在介绍admin-client端的安全配置时,引申出了 如何实现多个springcurity 配置 共存

作者:zeng1994
出处:http://www.cnblogs.com/zeng1994/
本文版权归作者和博客园共有,欢迎转载!但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接!

到此这篇关于springboot admin的简单使用的方法步骤的文章就介绍到这了,更多相关springboot admin使用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 14:32:10,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/2d2a7b98f78afefb2c09736a323f5ff3.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:SpringBoot Admin的简单使用的方法步骤.doc

本文 PDF 下载地址:SpringBoot Admin的简单使用的方法步骤.pdf

标签:密码   账号   项目   服务端
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图