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

目录

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

开放部分端点

端点映射

端口保护

[1、 添加Spring Security依赖:](#1、 添加Spring Security依赖:)

[2、Spring Security简单配置类:](#2、Spring Security简单配置类:)

3、application.yml配置规则

4、写一个简单的controller

5、简单登录页面


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

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

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

复制代码
management:
  endpoints:
    web:
      exposure:
        include: "*"

开放部分端点

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

复制代码
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,beans

端点映射

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

复制代码
management:
  endpoints:
    web:
      base-path: /high
      path-mapping:
         health: heal

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

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

html 复制代码
management:
  server:
    address: 127.0.0.1
    port: 8888

端口保护

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

1、 添加Spring Security依赖:

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

java 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2、Spring Security简单配置类
复制代码
package com.example.highactuator.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.formLogin() // 自定义自己编写的登录页面
                .loginPage("/test/login") // 登录页面设置
                .loginProcessingUrl("/test/login") // 登录访问路径
                .defaultSuccessUrl("/test/index").permitAll() // 登录成功后的跳转路径
                .and().authorizeRequests()
                .antMatchers("/high","/high/**").hasRole("ADMIN")
                .antMatchers("/", "/test/hello", "/login.html").permitAll() // 设置哪些路径可以直接访问,不需要认证
                .anyRequest().authenticated()
                .and().csrf().disable(); // 关闭csrf防护
    }
}
3、application.yml配置规则

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

复制代码
spring:
  security:
    user:
      name: admin
      password: admin
      roles: ADMIN

management:
  endpoint:
    health:
      show-components: when_authorized
  endpoints:
    web:
      base-path: /high
      path-mapping:
         health: heal
4、写一个简单的controller
复制代码
package com.example.highactuator.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/test")
public class TestController {
    @RequestMapping("/index")
    @ResponseBody
    public String index(){
        return "hello index";
    }

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "new hello";
    }

    @RequestMapping("/login")
    public String login(){
        return "login";
    }
}
5、简单登录页面
html 复制代码
<!DOCTYPE html>
<html>
<body>
<h2>登录页面</h2>
<form action="/test/login" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username" required><br><br>
    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required><br><br>
    <input type="submit" value="login">
</form>
</body>
</html>

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

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

相关推荐
一只叫煤球的猫8 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz9658 小时前
tcp/ip 中的多路复用
后端
bobz9658 小时前
tls ingress 简单记录
后端
皮皮林5519 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
你的人类朋友10 小时前
什么是OpenSSL
后端·安全·程序员
bobz96510 小时前
mcp 直接操作浏览器
后端
前端小张同学12 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook12 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康13 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在13 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net