spring boot admin 集成security的一些坑
集成Security教程请点击以下大佬的链接
http://blog.csdn.net/forezp/article/details/86105850
以下只分享以下我遇到的坑
1.邮箱发送问题
spring:
mail:
host: smtp.163.com #这是个人测试版,企业版设置不同 格式像这样 smtp.qq.com
username: XXXXXXX@163.com #邮箱 没话说
password: XXXXXXXXX #坑 这里填的是邮箱的IMAP/SMTP服务给的码 不是邮箱登录密码
properties:
main:
smtp:
auth: true
starttls:
enable: true
required: true
boot:
admin:
notify:
mail:
to: XXXXXXX@qq.com #到哪去
from: XXXXXXX@163.com #从哪发
#security配置
security:
user:
name: zlf
password: 123
2.日志的一些坑
- 在线查看日志必需以下配置
logging:
# 日志写入位置
file: logs/error.demo-logback.log
pattern:
# 日志格式
file: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx"
如果你自已配置了 logback-spring.xml文件
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!-- <level>Error</level>-->
<!-- </filter>-->
<!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
<File>logs/error.demo-logback.log</File>
<!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
<FileNamePattern>logs/demo-logback/error.created_on_%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
<!--只保留最近90天的日志-->
<maxHistory>90</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
<maxFileSize>2MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>${FILE_ERROR_PATTERN}</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
日志级别过滤一定不能写死,不然会影响admin的动态修改日志级别功能
2.client集成security动态日志级别更改问题
在server端集成security上面链接里有讲,但是在client端集成security讲的就比较少了,集成之后发现日志级别无法动态修改。
最后发现是少了security的配置,不配置就无法更改
/**
* 允许Server端读取actuator暴露的数据
*/
@Configuration
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
//其他所有请求需要登录
.anyRequest().authenticated()
.and().formLogin().and()
.httpBasic().and()
.csrf()
.disable();
}
}
顺手也贴以下client的配置
server:
port: 8080
servlet:
context-path: /demo
spring:
application:
# Spring Boot Admin展示的客户端项目名,不设置,会使用自动生成的随机id
name: spring-boot-demo-admin-client
boot:
admin:
client:
# Spring Boot Admin 服务端地址
url: "http://localhost:8000"
instance:
metadata:
# 客户端端点信息的安全认证信息
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
prefer-ip: true
# service-url: "http://localhost:8080/demo"
username: zlf
password: 123
security:
user:
name: zlf
password: 1234
management:
endpoint:
health:
# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况
show-details: always
endpoints:
web:
exposure:
# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点
include: "*"
logging:
# 日志写入位置
file: logs/error.demo-logback.log
pattern:
# 日志格式
file: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx"
顺手也把跨域配置一下
/**
* 跨域
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true)
.allowedHeaders("*")
.allowedOrigins("*")
.allowedMethods("*");
}}