SpringBoot 监控管理模块actuator没有权限的问题解决方法

我来为您详细讲解“SpringBoot 监控管理模块actuator没有权限的问题解决方法”的完整攻略。

问题描述

在使用 SpringBoot 监控管理模块 actuator 时,可能会遇到没有权限的问题,例如访问 http://localhost:8080/actuator 时出现 {"timestamp":"2021-07-28T12:34:56.789+00:00","status":403,"error":"Forbidden","message":"","path":"/actuator"} 的错误信息。

解决方法

添加依赖

首先,需要在应用程序的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.5.3</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.5.3</version>
</dependency>

这些依赖将使得 SpringBoot 应用程序自动集成 Spring Security。

配置 Spring Security

配置 Spring Security,实现对 actuator 监控管理模块的权限控制。在 application.properties 文件中添加以下配置:

# actuator 监控管理模块不需要认证
management.endpoint.health.show-details=never
management.endpoints.web.exposure.include=*
management.security.enabled=false

# 配置安全认证
spring.security.user.name=admin
spring.security.user.password=admin

上述配置中,我们将 actuator 监控管理模块不需要认证,同时设置了安全认证的用户名和密码,这些设置都可以根据实际情况进行修改。

配置 SpringBoot 应用程序类

在 SpringBoot 应用程序的 Application 类上添加 @EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true) 注解,代码示例如下:

@SpringBootApplication
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

这些注解将开启 Spring Security 安全认证和全局方法安全验证。

编写控制器类

在 SpringBoot 应用程序中,编写一个控制器类,用于演示 actuator 监控管理模块的权限控制。控制器类中有两个方法,一个是不需要权限的 hello 接口,一个是需要权限的 health 接口,只有通过验证的用户才能访问。

@RestController
public class DemoController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello world";
    }

    @GetMapping("/health")
    @PreAuthorize("hasAuthority('ROLE_ADMIN')")
    public String health() {
        return "OK";
    }
}

在上述代码中,我们使用了 @PreAuthorize("hasAuthority('ROLE_ADMIN')") 注解,只有具有 ROLE_ADMIN 权限的用户才能访问 /health 接口。

测试访问

启动 SpringBoot 应用程序后,在浏览器中访问 http://localhost:8080/hello 接口,应该能够正常访问。

然后,访问 http://localhost:8080/actuator,系统会提示输入用户名和密码,输入刚才配置的 admin/admin,登陆成功后即可查看 actuator 监控管理模块的信息。

示例一

我们来看下面这个示例,其中我们定义了 admin、user 两个角色,系统管理员(admin)才有权限访问 /health 接口:

@RestController
public class DemoController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello world";
    }

    @GetMapping("/health")
    @PreAuthorize("hasRole('admin')")
    public String health() {
        return "OK";
    }
}

在上述代码中,我们使用了 @PreAuthorize("hasRole('admin')") 注解,只有具有 admin 权限的用户才能访问 /health 接口。

示例二

还可以通过 roles 配置角色信息,来实现更细粒度的权限控制:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/admin/dashboard")
                .and()
                .logout()
                .logoutUrl("/logout")
                .deleteCookies("JSESSIONID");
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/static/**");
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin")
                .password("{noop}admin")
                .roles("ADMIN")
                .and()
                .withUser("user")
                .password("{noop}user")
                .roles("USER");
    }
}

上述代码中,我们配置了 /admin/** 接口只有具有 ADMIN 角色的用户才有权限访问,并且通过 inMemoryAuthentication() 配置了两个用户,admin 和 user。其中 password("{noop}admin") 用于禁用 passwordEncoder。

结语

以上就是“SpringBoot 监控管理模块actuator没有权限的问题解决方法”的完整攻略。通过上述步骤的操作,即可成功解决权限问题,并实现精细的权限控制。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 监控管理模块actuator没有权限的问题解决方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • maven三个常用的插件使用介绍

    下面我就为您详细讲解“Maven 三个常用的插件使用介绍”的完整攻略,包括介绍、示例和操作流程,以及实际应用案例,希望能给您带来一些帮助。 什么是 Maven 插件? Maven 插件是一些可重用的代码块,可以在 Maven 构建过程中执行特定的任务或目标。Maven 有许多插件可用,而每个插件都提供了在 Maven 构建生命周期的不同阶段执行的一些目标。 …

    Java 2023年5月20日
    00
  • 初学者易上手的SSH-struts2 01环境搭建(图文教程)

    我来详细讲解一下 “初学者易上手的SSH-struts2 01环境搭建(图文教程)” 的完整攻略: 环境说明 本文的环境搭建基于以下环境版本: Java version: 1.8.0_221 Tomcat version: 9.0.22 Struts2 version: 2.5.22 MySQL version: 5.7.27 步骤1:安装Java 1.1 …

    Java 2023年5月20日
    00
  • 举例详解用Java实现web分页功能的方法

    我来详细讲解一下“举例详解用Java实现web分页功能的方法”的完整攻略。下面我将按照步骤一一说明,包含两条示例。 1. 在Java Web应用中实现分页 在Java Web应用中实现分页的基本思路是:查询需要分页的数据,然后根据页面大小和当前页码将数据切分成多个子集,最后将某个子集的数据展示在页面上。整个过程可以通过以下步骤实现: 1.1 定义分页查询参数…

    Java 2023年5月20日
    00
  • IDEA项目如何实现打jar包

    下面就详细讲解一下如何在 IDEA 中将项目导出为 jar 包的完整攻略。 第一步:导入项目 首先需要将开发好的项目导入到 IDEA 中,可以直接使用 File → Open Project,或者使用 Import Project 选项,等待 IDEA 自动加载项目。 第二步:配置项目信息 接下来需要配置项目信息,将项目打包并导出。 配置 pom.xml 文…

    Java 2023年5月26日
    00
  • spring boot入门之诞生背景及优势影响

    Spring Boot入门之诞生背景及优势影响 1. 诞生背景 Spring Boot是一个开源Java项目,它是由Spring Framework团队开发的一款快速构建生产级别应用程序的框架。它的诞生背景是为了减少Spring应用程序的复杂性,同时提供一种非常便捷的方式来构建生产就绪的Spring应用程序。 传统的Spring Framework需要进行大…

    Java 2023年5月31日
    00
  • java web图片上传和文件上传实例

    下面是关于“Java Web文件上传和图片上传实例”的攻略及示例。 一、文件上传和图片上传的区别 文件上传和图片上传本质上类似,都是将本地文件上传到服务器的某个文件夹中。但是,图片上传还需要进行图片预览和显示操作,所以相较于文件上传,图片上传多了一些处理操作。 二、Java Web实现文件上传和图片上传 在Java Web中,文件上传和图片上传的核心是使用M…

    Java 2023年5月19日
    00
  • 使用Nginx+Tomcat实现负载均衡的全过程

    使用Nginx+Tomcat实现负载均衡的全过程主要包括以下几个步骤: 安装Nginx和Tomcat 首先需要在服务器上安装Nginx和Tomcat,Nginx用于反向代理以及负载均衡,Tomcat用于部署应用程序; 安装Nginx和Tomcat可以参考官方文档进行操作,也可以在Ubuntu上通过apt-get命令进行安装,示例命令如下: shell sud…

    Java 2023年5月19日
    00
  • 通过Spring Boot整合Mybatis分析自动配置详解

    通过Spring Boot整合Mybatis是非常常见的应用场景,它可以帮助Spring Boot快速集成Mybatis,使得开发人员可以更加便捷地进行数据库操作。接下来,我将详细讲解如何通过Spring Boot整合Mybatis以及相关的自动配置细节。 1. 添加依赖 首先,我们需要在pom.xml中添加Mybatis相关依赖。这里我们使用Mybatis…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部