在SpringCloud微服务中,有多个服务,要监控这些服务是否已经挂掉,这时可以使用admin来实现。代码如下:
基础工程的搭建何其他的微服务一样,不再赘述。
1):在pom文件中加入依赖:

<!-- eureka client start -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- eureka client end -->
<!--admin start-->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<!--admin end-->

2):在启动类中加入注解:

@EnableAdminServer
@EnableDiscoveryClient
@SpringBootApplication
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }
}

3):在配置文件application.properties中,加入配置:

server.port=10009
spring.application.name=fyk-admin

eureka.client.serviceUrl.defaultZone=http://192.168.22.11:8761/eureka/
eureka.instance.prefer-ip-address=true
#为服务指定自己的IP地址
eureka.instance.ip-address=192.168.55.11

至此,简单的admin服务端就搭建好了。


上面的admin监控服务搭建好了之后,发现直接从页面就可以进入了该服务监控页面,在此,加入安全控制,让输入用户名密码才可以进入。(其实在实际应用中,也许用不到。因为一般而言,这种监控类的服务是不允许外网访问的或者只允许特定的IP访问,毕竟这种属于管理员操作的东西)

加入安全控制:(加入登录页面)
由于这里admin的UI中,已经有了登录页,这里就将就这个登录页:
1):pom文件中,加入依赖包:

<!-- 加入security start -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 加入security end -->

2):在启动类中加入如下代码: 这些都是和security相关的,对于security很了解的话,完全可以自己配置,或者不使用admin的登录页面,使用定制化的页面也是可以的。

@Configuration
public static class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
    private final String adminContextPath;

    public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(adminContextPath + "/");

        http.authorizeRequests()
        	//静态资源访问权限
            .antMatchers(adminContextPath + "/assets/**").permitAll() 
            //登录页访问权限
            .antMatchers(adminContextPath + "/login").permitAll()
            //其他请求,就必须要经过认证
            .anyRequest().authenticated() 
            .and()
            //配置登录页面
            .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and() 
            //配置登出页面
            .logout().logoutUrl(adminContextPath + "/logout").and()
            //启用HTTP基本支持。这个是admin客户端注册所必须的配置
            .httpBasic().and() 
            //使用cookie启用CRSF-Protection
            .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())  
            .ignoringAntMatchers(
                adminContextPath + "/instances",   //禁用CRSF-Protection端点
                adminContextPath + "/actuator/**"  //禁用CRSF-Protection执行器端点
            );
        // @formatter:on
    }
}

3):在application.properties中加入配置:登录的用户名@密码

spring.security.user.name=fyk
spring.security.user.password=123456
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐