SpringCloud环境搭建---Springboot-Admin

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wxy540843763/article/details/83243882

springboot- AdminServer

搭建过程

    1. 修改pom.xml
<dependencies>
        <!--Spring admin-->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
        </dependency>

        <!--配置中心客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--添加spring-boot-starter-security后,如果没有一下依赖,会报错 :-->
        <!--Error:(17, 8) java: 无法访问javax.servlet.Filter 找不到javax.servlet.Filter的类文件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • 2.新建bootstrap.yml
spring:
  application:
    name: doraemon-monitor
  cloud:
    config:
      enabled: true
      discovery:
        enabled: true
        service-id: doraemon-configServer
  security:
    user:
      name: moyang
      password: moyang1
  profiles:
    active: secure
server:
  port: 8764
eureka:
  client:
    service-url:
      defaultZone: http://${eureka_service_url:eureka-peer1:8761}/eureka/
    registry-fetch-interval-seconds: 10
  instance:
    metadata-map:
      user.name: moyang
      user.password: moyang1
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always
  • 3.修改application.yml
turbine:
  aggregator:
    cluster-config: default # 指定聚合哪些集群,多个使用","分割,默认为 default
  app-config: doraemon-zuul,doraemon-example-service,doraemon-configServer
  clusterNameExpression: new String("dor-")
spring:
  boot:
    admin:
      monitor:
        period: 1000ms # 监控刷新时间
      discovery:
        enabled: true # 开启自动发现服务
  • 4.修改启动类

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

启动后,查看eureka页面:
在这里插入图片描述

访问:127.0.0.1:8764,可以看到
bootAdmin监控

在这里插入图片描述

点击对应的实例可以看到详细信息:
在这里插入图片描述

添加安全控制

  • 1.引入security依赖:
 <!--安全验证-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
  • 2.新建一个安全控制的配置类:
package com.moyang.doraemon.monitor.configurations;

import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;

/**
 * doraemon -- 监控添加权限验证
 *
 * @author 墨阳
 * @date 2018-10-21
 */
@Configuration
@Profile("secure") // secure:安全
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {

    private final String adminContextPath;


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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        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().httpBasic()
                .and().csrf().disable();
    }
}

3.新建一个允许所有的配置类:

package com.moyang.doraemon.monitor.configurations;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;


/**
 * doraemon -- 允许所有的人访问。
 *
 * @author 墨阳
 * @date 2018-10-21
 */
@Configuration
@Profile("insecure") //insecure:不安全。
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll()//
                .and().csrf().disable();
    }
}

重新启动,这时候,重新访问Admin页面,就需要填写用于用户名和密码了。
在这里插入图片描述

docker集成

修改pom.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!--指定镜像的名称-->
                    <imageName>${project.artifactId}:${project.version}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <forceTags>true</forceTags>
                    <!--那些需要和Dockerfile放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入-->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件,${project.build.finalName}.jar指的是打包后的jar包文件。-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

新建Dockerfile(src/main/docker):

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD dor-monitor-0.0.1-SNAPSHOT.jar app.jar
RUN chmod 755 /app.jar
EXPOSE 8764
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

使用mvn clean package docker:build打包

猜你喜欢

转载自blog.csdn.net/wxy540843763/article/details/83243882