在SpringCloud微服务中,有多个服务,要监控这些服务是否已经挂掉,这时可以使用admin来实现。代码如下:
基础工程的搭建何其他的微服务一样,不再赘述。
1):在pom文件中加入依赖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1<!-- eureka client start -->
2<dependency>
3 <groupId>org.springframework.cloud</groupId>
4 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
5</dependency>
6<!-- eureka client end -->
7<!--admin start-->
8<dependency>
9 <groupId>de.codecentric</groupId>
10 <artifactId>spring-boot-admin-starter-server</artifactId>
11</dependency>
12<!--admin end-->
13
14
2):在启动类中加入注解:
1
2
3
4
5
6
7
8
9
10 1@EnableAdminServer
2@EnableDiscoveryClient
3@SpringBootApplication
4public class AdminApplication {
5 public static void main(String[] args) {
6 SpringApplication.run(AdminApplication.class, args);
7 }
8}
9
10
3):在配置文件application.properties中,加入配置:
1
2
3
4
5
6
7
8
9 1server.port=10009
2spring.application.name=fyk-admin
3
4eureka.client.serviceUrl.defaultZone=http://192.168.22.11:8761/eureka/
5eureka.instance.prefer-ip-address=true
6#为服务指定自己的IP地址
7eureka.instance.ip-address=192.168.55.11
8
9
至此,简单的admin服务端就搭建好了。
上面的admin监控服务搭建好了之后,发现直接从页面就可以进入了该服务监控页面,在此,加入安全控制,让输入用户名密码才可以进入。(其实在实际应用中,也许用不到。因为一般而言,这种监控类的服务是不允许外网访问的或者只允许特定的IP访问,毕竟这种属于管理员操作的东西)
加入安全控制:(加入登录页面)
由于这里admin的UI中,已经有了登录页,这里就将就这个登录页:
1):pom文件中,加入依赖包:
1
2
3
4
5
6
7
8
9
10
11
12 1<!-- 加入security start -->
2<dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter-security</artifactId>
5</dependency>
6<dependency>
7 <groupId>org.springframework.boot</groupId>
8 <artifactId>spring-boot-starter-web</artifactId>
9</dependency>
10<!-- 加入security end -->
11
12
2):在启动类中加入如下代码: 这些都是和security相关的,对于security很了解的话,完全可以自己配置,或者不使用admin的登录页面,使用定制化的页面也是可以的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 1@Configuration
2public static class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
3 private final String adminContextPath;
4
5 public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
6 this.adminContextPath = adminServerProperties.getContextPath();
7 }
8
9 @Override
10 protected void configure(HttpSecurity http) throws Exception {
11 // @formatter:off
12 SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
13 successHandler.setTargetUrlParameter("redirectTo");
14 successHandler.setDefaultTargetUrl(adminContextPath + "/");
15
16 http.authorizeRequests()
17 //静态资源访问权限
18 .antMatchers(adminContextPath + "/assets/**").permitAll()
19 //登录页访问权限
20 .antMatchers(adminContextPath + "/login").permitAll()
21 //其他请求,就必须要经过认证
22 .anyRequest().authenticated()
23 .and()
24 //配置登录页面
25 .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
26 //配置登出页面
27 .logout().logoutUrl(adminContextPath + "/logout").and()
28 //启用HTTP基本支持。这个是admin客户端注册所必须的配置
29 .httpBasic().and()
30 //使用cookie启用CRSF-Protection
31 .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
32 .ignoringAntMatchers(
33 adminContextPath + "/instances", //禁用CRSF-Protection端点
34 adminContextPath + "/actuator/**" //禁用CRSF-Protection执行器端点
35 );
36 // @formatter:on
37 }
38}
39
40
3):在application.properties中加入配置:登录的用户名@密码
1
2
3
4 1spring.security.user.name=fyk
2spring.security.user.password=123456
3
4