actuator的自定义权限控制

因公司安全需求,springboot自带的actuator必须加上权限控制。
但是我又不想因为这个而加上spring-security和数据库,因为很多微服务是不需要这两个的。
当然为了安全原因,用户名密码什么的也不可能代码里写死。
于是想自己添加一个拦截器,碰到actuator请求就检查一下token。

  1. 首先想到的是handlerinterceptor。
    写了个handlerinterceptor,却发现拦截不到actuator的请求。对普通请求是能拦截到的。
  2. 于是改用Filter。
    写完后运行,发现不管是普通的请求还是actuator请求,都可以拦截到,以为大功告成了。于是又设置了一下management.server.port,惊奇的发现,filter不起作用了。

不管百度还是谷歌,都没有找到解决方案,毕竟,官方的方案是加上security。但是我不想那么复杂。
最后无奈翻看actuator的源代码,终于找到了解决方案:
在spring.factories里增加一行:
org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=xxxxxxxx
即通过上述方式,把configure文件指定为actuator需要加载的配置,同时configure文件里注入filter的bean。这样就一切正常了。

究其原因,是因为独立端口时,actuator使用了自己的一个applicationContext,所以默认的注入方式不会进入actuator的context。
(课后作业:security本质也是注入了filter,为什么会在actuator里生效呢?)

另外,其实还有一个问题,注入filter是需要指定path的,而actuator的path可以通过如下3个参数修改:

  • server.servlet.context-path
  • management.server.servlet.context-path
  • management.endpoints.web.basepath
    那么,注入filter时,path指定什么呢?
    同样翻看源代码,发现可以通过注入 WebEndpointProperties类,来获取到basepath。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值