1.5.10.RELEASE
,spring-boot-admin的版本为1.5.7
,如果是其他版本的springboot请自行对照maven项目版本进行配置spring-boot-admin
需要的依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>de.codecentricgroupId>
<artifactId>spring-boot-admin-starter-serverartifactId>
dependency>
通过
标签引用 spring-boot-admin
的父级依赖,然后在
标签中可以不需要添加版本号方便版本号统一管理,也可不用dependencyManagement
自己直接指定版本号
<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.codecentricgroupId>
<artifactId>spring-boot-admin-dependenciesartifactId>
<version>${spring-boot-admin.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
引入依赖后修改项目启动的端口号(也可不修改,默认8080),打开application.yml
文件
server:
port: 8081
配置后,启动访问 http://localhost:8081 如下图,暂时没有client项目启动所以列表为空:
需要的依赖(依赖的版本号同Server一样),因为spring-boot-admin-starter-client
中已经包含了spring-boot-starter-actuator
包所以这里没有引入
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>de.codecentricgroupId>
<artifactId>spring-boot-admin-starter-clientartifactId>
dependency>
标签
<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.codecentricgroupId>
<artifactId>spring-boot-admin-dependenciesartifactId>
<version>${spring-boot-admin.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
打开application.yml
文件,添加配置
management:
# 指定客户端监听接口的路径
context-path: /client_jar
security:
# 关闭自带的安全拦截
enabled: false
spring:
application:
# 指定项目名
name: client-jar
boot:
admin:
# 指定服务端项目地址(为上边server项目配置的端口号)
url: http://localhost:8081
server:
# 指定项目端口号
port: 8082
如果项目是配置成WAR包启动的话,yml中需要添加spring.boot.admin.client.service-base-url=项目访问地址
,如果不添加的话项目监控无法识别项目访问地址,会抛异常信息如下,已经很明确的指出如果是部署到Server容器启动需要指定service-base-url
填入项目访问路径
2019-05-18 14:36:34.124 [registrationTask1] ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler:95 - Unexpected error occurred in scheduled task.
java.lang.IllegalStateException: service-base-url must be set when deployed to servlet-container
at de.codecentric.boot.admin.client.registration.DefaultApplicationFactory.getServiceUrl(DefaultApplicationFactory.java:68)
at de.codecentric.boot.admin.client.registration.DefaultApplicationFactory.getManagementUrl(DefaultApplicationFactory.java:95)
at de.codecentric.boot.admin.client.registration.DefaultApplicationFactory.getHealthUrl(DefaultApplicationFactory.java:115)
at de.codecentric.boot.admin.client.registration.DefaultApplicationFactory.createApplication(DefaultApplicationFactory.java:50)
at de.codecentric.boot.admin.client.registration.ApplicationRegistrator.createApplication(ApplicationRegistrator.java:140)
at de.codecentric.boot.admin.client.registration.ApplicationRegistrator.register(ApplicationRegistrator.java:65)
at de.codecentric.boot.admin.client.registration.RegistrationApplicationListener$1.run(RegistrationApplicationListener.java:80)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:308)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
然后启动项目,查看Server端页面,在列表中展示了我们已经启动的client项目,Status为UP
代表项目正常运行
点击details
按钮进入详情页查看项目信息
需要添加的的依赖
<dependency>
<groupId>de.codecentricgroupId>
<artifactId>spring-boot-admin-server-ui-loginartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
dependency>
application.yml
文件添加security.user.name
和security.user.password
配置,指定账号密码
security:
user:
name: admin
password: 123456
服务端完整配置如下
server:
port: 8081
security:
user:
name: admin
password: 123456
添加Security的权限拦截,参考自spring-boot-admin官方文档 http://codecentric.github.io/spring-boot-admin/1.5.7/#_securing_spring_boot_admin_server
package com.lx.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* 权限拦截配置
*
* @author 段誉
* @create 2019-05-17 13:04
*/
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// Page with login form is served as /login.html and does a POST on /login
http.formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll();
// The UI does a POST on /logout on logout
http.logout().logoutUrl("/logout");
// The ui currently doesn't support csrf
http.csrf().disable();
// Requests for the login page and the static assets are allowed
http.authorizeRequests()
.antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**")
.permitAll();
// ... and any other request needs to be authorized
http.authorizeRequests().antMatchers("/**").authenticated();
// Enable so that the clients can authenticate via HTTP basic for registering
http.httpBasic();
}
}
配置过后启动项目,如下图,输入之前配置的账号密码admin
和123456
即可登录成功
application.yml
文件添加spring.boot.admin.username
和spring.boot.admin.password
设置要和server中设置的一致spring:
application:
name: client-jar
boot:
admin:
url: http://localhost:8081
# 指定连接服务端的账号密码
username: admin
password: 123456
management:
context-path: /client_jar
security:
enabled: true
spring:
application:
name: client-jar
boot:
admin:
url: http://localhost:8081
username: admin
password: 123456
server:
port: 8082
需要添加的依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
dependency>
打开application.yml
文件,将management.security.enabled
设置为true,表示开启安全验证,添加security.user.username
、security.user.password
和security.basic.path
配置
management:
security:
enabled: true
security:
user:
# 设置访问客户端接口的账号密码
name: client
password: 123456
basic:
# 指定security拦截的路径 /client_jar/**:只拦截项目监控的相关接口
path: /client_jar/**
重启项目,访问项目监听接口中的任意代码,发现会弹出登录弹窗,例如访问/loggers
接口
输入配置的账号密码后即可正常返回数据
这个时候访问服务端监听页面发现client-jar
客户端连接不上
是因为客户端也设置了账号密码但是在连接到服务端时没有传入账号密码导致的需要添加spring.boot.admin.client.metadata.user.name
和spring.boot.admin.client.metadata.user.password
传入设置的账号密码就可以了
spring:
boot:
admin:
client:
# metadata传递的参数为map类,所以user.name和user.password不是user对象下的属性而是map的key值
metadata:
user.name: client
user.password: 123456
完整配置信息如下
management:
context-path: /client_jar
security:
enabled: true
spring:
application:
name: client-jar
boot:
admin:
url: http://localhost:8081
username: admin
password: 123456
client:
metadata:
user.name: client
user.password: 123456
server:
port: 8082
security:
user:
name: client
password: 123456
basic:
path: /client_jar/**
再重新client端,然后登陆server端页面,可以正常监听client端
https://gitee.com/fengzxia/springboot-admin-and-actuator-learn