• springboot actuator:开放全部(部分)端点、端点映射、端点保护


          

    目录

    开放全部端点(不安全):

    开放部分端点    

     端点映射

    端口保护

    1、 添加Spring Security依赖:

    2、Spring Security简单配置类: 

    3、application.yml配置规则

    4、写一个简单的controller

    5、简单登录页面


      

            目前springboot默认暴露“/actuator、/health”端点。通过访问“/actuator”端点即可看到:

    开放全部端点(不安全):

               如果想要打开全部端点,可以在配置文件application.yml中添加以下配置

    1. management:
    2. endpoints:
    3. web:
    4. exposure:
    5. include: "*"

    开放部分端点    

             现在,所有Actuator端点将对外开放,并且可以通过相应的URL进行访问。比如,可以通过 /actuator/health 访问健康检查端点。但是,打开所有Actuator端点可能会带来一些安全风险,因此请在生产环境中慎重考虑。建议您仅仅开放必需的端点,并根据实际需求限制端点的访问权限。如下:

    1. management:
    2. endpoints:
    3. web:
    4. exposure:
    5. include: health,info,metrics,beans

     端点映射

            springboot actuator的默认的端点 URL 前缀和端点 id, 所有人都知道,不是很安全,可以通过配置更改端点映射,如以下修改:

    1. management:
    2. endpoints:
    3. web:
    4. base-path: /high
    5. path-mapping:
    6. health: heal

     修改后即可通过“/high/heal”访问health端口。

    端点映射也可以修改地址与端口号:

    1. management:
    2. server:
    3. address: 127.0.0.1
    4. port: 8888

    端口保护

            springboot actuator的登录保护验证是通过Spring Security来实现的,接下来我们通过一个简单的示例实现一下。

    1、 添加Spring Security依赖:

             首先,您需要添加Spring Security依赖到项目中。可以在项目的pom.xml文件中添加以下依赖:

    1. org.springframework.boot
    2. spring-boot-starter-security
    2、Spring Security简单配置类: 
    1. package com.example.highactuator.config;
    2. import org.springframework.context.annotation.Configuration;
    3. import org.springframework.http.HttpMethod;
    4. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    5. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    6. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    7. @Configuration
    8. @EnableWebSecurity
    9. public class SecurityConfig extends WebSecurityConfigurerAdapter {
    10. @Override
    11. protected void configure(HttpSecurity http) throws Exception {
    12. http.formLogin() // 自定义自己编写的登录页面
    13. .loginPage("/test/login") // 登录页面设置
    14. .loginProcessingUrl("/test/login") // 登录访问路径
    15. .defaultSuccessUrl("/test/index").permitAll() // 登录成功后的跳转路径
    16. .and().authorizeRequests()
    17. .antMatchers("/high","/high/**").hasRole("ADMIN")
    18. .antMatchers("/", "/test/hello", "/login.html").permitAll() // 设置哪些路径可以直接访问,不需要认证
    19. .anyRequest().authenticated()
    20. .and().csrf().disable(); // 关闭csrf防护
    21. }
    22. }
    3、application.yml配置规则

    配置设置了一个具有用户名 admin 和密码 password 的管理员用户,并且仅当用户提供正确的用户名和密码后,才会显示详细的健康信息。以及health的映射。

    1. spring:
    2. security:
    3. user:
    4. name: admin
    5. password: admin
    6. roles: ADMIN
    7. management:
    8. endpoint:
    9. health:
    10. show-components: when_authorized
    11. endpoints:
    12. web:
    13. base-path: /high
    14. path-mapping:
    15. health: heal
    4、写一个简单的controller
    1. package com.example.highactuator.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.ResponseBody;
    5. @Controller
    6. @RequestMapping("/test")
    7. public class TestController {
    8. @RequestMapping("/index")
    9. @ResponseBody
    10. public String index(){
    11. return "hello index";
    12. }
    13. @RequestMapping("/hello")
    14. @ResponseBody
    15. public String hello(){
    16. return "new hello";
    17. }
    18. @RequestMapping("/login")
    19. public String login(){
    20. return "login";
    21. }
    22. }
    5、简单登录页面
    1. html>
    2. <html>
    3. <body>
    4. <h2>登录页面h2>
    5. <form action="/test/login" method="post">
    6. <label for="username">用户名:label>
    7. <input type="text" id="username" name="username" required><br><br>
    8. <label for="password">密码:label>
    9. <input type="password" id="password" name="password" required><br><br>
    10. <input type="submit" value="login">
    11. form>
    12. body>
    13. html>

    最后浏览器验证一下,通过访问“/high”或者“/high/heal”(我做了端点映射了,没有做映射访问“/actuator、/actuator/health端点”)可以跳转到以下页面:

    输入用户名密码并成功登录后,将显示健康信息。 

  • 相关阅读:
    NXP官方uboot针对ALPHA开发板网络驱动更改说明三
    I.MX6U-系统移植-4-uboot移植
    大模型分布式训练并行技术(四)-张量并行
    Android 9.0 切换系统语言
    智慧公厕:探索未来公共厕所的创新设计
    Python中记住过去(模型状态)的五种方法
    2024-2-22 学习笔记(Yolo-World, Yolov8-OBB,小样本分类,CNN/Transfomer选择)
    Vue2 + Echarts实现3D地图下钻
    优化SOCKS5的方法
    指纹浏览器功能对比:AdsPower VS Multilogin
  • 原文地址:https://blog.csdn.net/weixin_43522117/article/details/134312877