提交 897836b3 编写于 作者: 武汉红喜's avatar 武汉红喜

whatsmars-boot-sample-actuator

上级 7d27f628
package org.hongxi.whatsmars.common.util;
import org.apache.commons.lang.StringUtils;
/**
* Created by shenhongxi on 2020/7/17.
*/
public class SystemUtils {
public static String getProperty(String key) {
return System.getProperty(key, System.getenv(key));
}
public static boolean contains(String key) {
return StringUtils.isNotBlank(getProperty(key));
}
public static String getProperty(String key, String def) {
String val = getProperty(key);
return StringUtils.isNotBlank(val) ? val : def;
}
}
......@@ -24,6 +24,7 @@
<module>whatsmars-boot-sample-redis</module>
<module>whatsmars-boot-sample-mybatis</module>
<module>whatsmars-boot-sample-beans</module>
<module>whatsmars-boot-sample-actuator</module>
</modules>
<dependencies>
......
```
http://localhost:8080/actuator/prometheus?x_token=whatsmars-spring-boot
```
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>whatsmars-spring-boot-samples</artifactId>
<groupId>org.hongxi</groupId>
<version>Rocket.S8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>whatsmars-boot-sample-actuator</artifactId>
<name>${project.artifactId}</name>
<packaging>jar</packaging>
<description>Spring Boot Actuator Sample</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.hongxi</groupId>
<artifactId>whatsmars-common</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package org.hongxi.whatsmars.boot.sample.actuator;
import org.hongxi.whatsmars.boot.sample.actuator.filter.ActuatorFilter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by shenhongxi on 2020/7/17.
*/
@Configuration
@ConditionalOnWebApplication
public class ActuatorAutoConfiguration {
@Bean
public ActuatorFilter actuatorFilter() {
return new ActuatorFilter();
}
}
package org.hongxi.whatsmars.boot.sample.actuator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by shenhongxi on 2020/7/17.
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
package org.hongxi.whatsmars.boot.sample.actuator;
import org.hongxi.whatsmars.common.util.SystemUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
/**
* Created by shenhongxi on 2020/7/17.
*/
public class EnvironmentProcessor implements EnvironmentPostProcessor {
public static final String PROP_METRICS_INCLUDE = "management.endpoints.web.exposure.include";
public static final String PROP_METRICS_TAGS = "management.metrics.tags.application";
public static final String PROP_TOMCAT_MBEAN_ENABLED = "server.tomcat.mbeanregistry.enabled";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
if (!SystemUtils.contains(PROP_METRICS_INCLUDE)) {
System.setProperty(PROP_METRICS_INCLUDE, "prometheus");
}
if (!SystemUtils.contains(PROP_METRICS_TAGS)) {
System.setProperty(PROP_METRICS_TAGS, environment.getProperty("spring.application.name", "actuator-sample"));
}
if (!SystemUtils.contains(PROP_TOMCAT_MBEAN_ENABLED)) {
System.setProperty(PROP_TOMCAT_MBEAN_ENABLED, "true");
}
}
}
package org.hongxi.whatsmars.boot.sample.actuator.filter;
import org.springframework.http.HttpStatus;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created by shenhongxi on 2020/7/17.
*/
public class ActuatorFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
if (security(request)) {
filterChain.doFilter(request, response);
} else {
response.sendError(HttpStatus.UNAUTHORIZED.value());
}
}
private boolean security(HttpServletRequest request) {
// 当用requestURI时用 curl http://127.0.0.1:8080/actuator/svg/../prometheus 可以访问
if (request.getServletPath() == null) {
return true;
}
if (!request.getServletPath().startsWith("/actuator")) {
return true;
}
return "whatsmars-spring-boot".equals(request.getParameter("x_token"));
}
}
# Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.hongxi.whatsmars.boot.sample.actuator.EnvironmentProcessor
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册