Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
武汉红喜
whatsmars
提交
36b98f0f
W
whatsmars
项目概览
武汉红喜
/
whatsmars
通知
3
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
whatsmars
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
36b98f0f
编写于
7月 30, 2020
作者:
武汉红喜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
actuator
上级
b55f7c46
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
176 addition
and
71 deletion
+176
-71
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/README.md
...ing-boot-samples/whatsmars-boot-sample-actuator/README.md
+6
-1
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/pom.xml
...pring-boot-samples/whatsmars-boot-sample-actuator/pom.xml
+2
-2
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/ActuatorAutoConfiguration.java
...smars/boot/sample/actuator/ActuatorAutoConfiguration.java
+10
-3
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/ActuatorEnvironmentPostProcessor.java
...oot/sample/actuator/ActuatorEnvironmentPostProcessor.java
+68
-0
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/ActuatorReporter.java
...ngxi/whatsmars/boot/sample/actuator/ActuatorReporter.java
+47
-0
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/EnvironmentProcessor.java
.../whatsmars/boot/sample/actuator/EnvironmentProcessor.java
+0
-28
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/StandardWebSecurityConfigurer.java
...s/boot/sample/actuator/StandardWebSecurityConfigurer.java
+42
-0
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/filter/ActuatorFilter.java
...whatsmars/boot/sample/actuator/filter/ActuatorFilter.java
+0
-36
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/resources/META-INF/spring.factories
...ple-actuator/src/main/resources/META-INF/spring.factories
+1
-1
未找到文件。
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/README.md
浏览文件 @
36b98f0f
## My Actuator Starter
-
ActuatorEnvironmentPostProcessor: 设置actuator相关properties,限定用户不可修改endpoint相关属性,关闭
`spring-boot-starter-actuator`
默认配置
-
StandardWebSecurityConfigurer: 重写Security策略
-
ActuatorReporter: 上报metrics数据至时序数据库
```
http://localhost:8080/actuator/prometheus?x_token=
whatsmars-spring-boot
curl http://localhost:8080/actuator/mappings -u application:
whatsmars-spring-boot
```
\ No newline at end of file
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/pom.xml
浏览文件 @
36b98f0f
...
...
@@ -24,8 +24,8 @@
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
<dependency>
<groupId>
io.micrometer
</groupId>
<artifactId>
micrometer-registry-prometheus
</artifactId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-security
</artifactId>
</dependency>
<dependency>
<groupId>
org.hongxi
</groupId>
...
...
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/ActuatorAutoConfiguration.java
浏览文件 @
36b98f0f
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
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.security.config.annotation.web.WebSecurityConfigurer
;
/**
* Created by shenhongxi on 2020/7/17.
...
...
@@ -12,8 +13,14 @@ import org.springframework.context.annotation.Configuration;
@ConditionalOnWebApplication
public
class
ActuatorAutoConfiguration
{
@Order
(
99
)
@Bean
public
ActuatorFilter
actuatorFilter
()
{
return
new
ActuatorFilter
();
public
WebSecurityConfigurer
standardWebSecurityConfigurer
()
{
return
new
StandardWebSecurityConfigurer
();
}
@Bean
public
ActuatorReporter
actuatorReporter
()
{
return
new
ActuatorReporter
();
}
}
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/ActuatorEnvironmentPostProcessor.java
0 → 100644
浏览文件 @
36b98f0f
package
org.hongxi.whatsmars.boot.sample.actuator
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration
;
import
org.springframework.boot.env.EnvironmentPostProcessor
;
import
org.springframework.core.env.ConfigurableEnvironment
;
/**
* Created by shenhongxi on 2020/7/17.
*/
public
class
ActuatorEnvironmentPostProcessor
implements
EnvironmentPostProcessor
{
private
static
final
String
TRUE
=
"true"
;
private
static
final
String
FALSE
=
"false"
;
@Override
public
void
postProcessEnvironment
(
ConfigurableEnvironment
environment
,
SpringApplication
application
)
{
resolveManagement
(
environment
);
resolveSecurity
(
environment
);
}
private
void
resolveSecurity
(
final
ConfigurableEnvironment
environment
)
{
if
(!
environment
.
containsProperty
(
"spring.security.user.name"
))
{
System
.
setProperty
(
"spring.security.user.name"
,
"application"
);
}
if
(!
environment
.
containsProperty
(
"spring.security.user.password"
))
{
System
.
setProperty
(
"spring.security.user.password"
,
"whatsmars-spring-boot"
);
}
if
(!
environment
.
containsProperty
(
"spring.security.user.roles"
))
{
System
.
setProperty
(
"spring.security.user.roles"
,
"application"
);
}
}
private
void
resolveManagement
(
final
ConfigurableEnvironment
environment
)
{
// 有关Endpoints安全问题
String
excludes
=
environment
.
getProperty
(
"spring.autoconfigure.exclude"
);
StringBuilder
sb
=
new
StringBuilder
();
if
(
excludes
!=
null
)
{
sb
.
append
(
","
);
}
// 关闭spring-boot默认的security配置
sb
.
append
(
ManagementWebSecurityAutoConfiguration
.
class
.
getName
());
System
.
setProperty
(
"spring.autoconfigure.exclude"
,
sb
.
toString
());
// 默认全部关闭
System
.
setProperty
(
"management.endpoints.enabled-by-default"
,
FALSE
);
System
.
setProperty
(
"management.endpoints.web.exposure.include"
,
"*"
);
System
.
setProperty
(
"management.endpoints.web.exposure.exclude"
,
"shutdown,threaddump,heapdump"
);
System
.
setProperty
(
"management.endpoint.health.enabled"
,
TRUE
);
System
.
setProperty
(
"management.endpoint.health.show-details"
,
"never"
);
System
.
setProperty
(
"management.endpoint.info.enabled"
,
TRUE
);
System
.
setProperty
(
"management.endpoint.mappings.enabled"
,
TRUE
);
System
.
setProperty
(
"management.endpoint.env.enabled"
,
TRUE
);
System
.
setProperty
(
"management.endpoint.conditions.enabled"
,
TRUE
);
System
.
setProperty
(
"management.endpoint.configprops.enabled"
,
TRUE
);
System
.
setProperty
(
"management.endpoint.beans.enabled"
,
TRUE
);
System
.
setProperty
(
"management.endpoint.loggers.enabled"
,
TRUE
);
System
.
setProperty
(
"management.endpoint.metrics.enabled"
,
TRUE
);
System
.
setProperty
(
"management.metrics.enable.http"
,
FALSE
);
System
.
setProperty
(
"management.metrics.enable.log4j2"
,
FALSE
);
System
.
setProperty
(
"server.tomcat.mbeanregistry.enabled"
,
TRUE
);
}
}
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/ActuatorReporter.java
0 → 100644
浏览文件 @
36b98f0f
package
org.hongxi.whatsmars.boot.sample.actuator
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.boot.actuate.metrics.MetricsEndpoint
;
import
java.util.Set
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.TimeUnit
;
/**
* Created by shenhongxi on 2020/7/30.
*/
@Slf4j
public
class
ActuatorReporter
implements
CommandLineRunner
{
@Autowired
(
required
=
false
)
private
MetricsEndpoint
metricsEndpoint
;
private
ExecutorService
executorService
;
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
log
.
info
(
"metrics endpoint is open : {}"
,
metricsEndpoint
!=
null
);
if
(
metricsEndpoint
!=
null
)
{
Set
<
String
>
names
=
metricsEndpoint
.
listNames
().
getNames
();
if
(
names
.
isEmpty
())
{
return
;
}
executorService
=
Executors
.
newFixedThreadPool
(
4
);
Executors
.
newSingleThreadScheduledExecutor
().
scheduleAtFixedRate
(
()
->
report
(
names
),
1
,
3
,
TimeUnit
.
SECONDS
);
}
}
private
void
report
(
Set
<
String
>
names
)
{
names
.
forEach
(
name
->
{
executorService
.
submit
(()
->
{
// store in time series database
});
});
}
}
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/EnvironmentProcessor.java
已删除
100644 → 0
浏览文件 @
b55f7c46
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"
);
}
}
}
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/StandardWebSecurityConfigurer.java
0 → 100644
浏览文件 @
36b98f0f
package
org.hongxi.whatsmars.boot.sample.actuator
;
import
org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpoint
;
import
org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest
;
import
org.springframework.boot.actuate.beans.BeansEndpoint
;
import
org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint
;
import
org.springframework.boot.actuate.env.EnvironmentEndpoint
;
import
org.springframework.boot.actuate.logging.LoggersEndpoint
;
import
org.springframework.boot.actuate.metrics.MetricsEndpoint
;
import
org.springframework.boot.actuate.web.mappings.MappingsEndpoint
;
import
org.springframework.security.config.annotation.web.builders.HttpSecurity
;
import
org.springframework.security.config.annotation.web.builders.WebSecurity
;
import
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
;
/**
* Created by shenhongxi on 2020/7/30.
*/
public
class
StandardWebSecurityConfigurer
extends
WebSecurityConfigurerAdapter
{
@Override
public
void
configure
(
WebSecurity
web
)
throws
Exception
{
// 普通web资源
}
@Override
public
void
configure
(
HttpSecurity
http
)
throws
Exception
{
http
.
authorizeRequests
()
.
requestMatchers
(
EndpointRequest
.
to
(
MappingsEndpoint
.
class
,
EnvironmentEndpoint
.
class
,
ConditionsReportEndpoint
.
class
,
ConfigurationPropertiesReportEndpoint
.
class
,
BeansEndpoint
.
class
,
LoggersEndpoint
.
class
,
MetricsEndpoint
.
class
))
.
hasRole
(
"application"
)
.
anyRequest
()
.
permitAll
()
.
and
()
.
httpBasic
();
}
}
\ No newline at end of file
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/java/org/hongxi/whatsmars/boot/sample/actuator/filter/ActuatorFilter.java
已删除
100644 → 0
浏览文件 @
b55f7c46
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"
));
}
}
whatsmars-spring-boot-samples/whatsmars-boot-sample-actuator/src/main/resources/META-INF/spring.factories
浏览文件 @
36b98f0f
# Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.hongxi.whatsmars.boot.sample.actuator.
Environmen
tProcessor
org.hongxi.whatsmars.boot.sample.actuator.
ActuatorEnvironmentPos
tProcessor
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录