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日

相关文章

  • JSP中正则表达式用法实例

    那么让我们来详细讲解一下“JSP中正则表达式用法实例”的完整攻略。 什么是正则表达式? 正则表达式是一种匹配字符串的模式。它可以用来搜索、编辑和处理文本。在JSP中,我们可以使用正则表达式进行数据校验和处理。 正则表达式的语法 正则表达式由普通字符(例如字符 a 到 z)和特殊字符(称为“元字符”)组成。例如,正则表达式 \d 表示一个数字,\s 表示一个空…

    Java 2023年6月15日
    00
  • Java数组实例练习题整理

    首先需要明确的是,本篇攻略旨在帮助初学者提升对于Java数组的理解和应用,因此我们会针对数组的定义、初始化、常用操作和实例练习题等方面进行讲解。 数组定义和初始化 数组是一种能够存储多个相同类型数据的结构,它能够提供快速的访问和遍历方式。在Java中,数组的定义方式为 数组类型[] 数组名 或者 数组类型 数组名[],其中 数组类型 表示数组中存储的数据类型…

    Java 2023年5月26日
    00
  • 一名优秀的程序员是这样炼成的

    一名优秀的程序员是这样炼成的 成为一名优秀的程序员,并不容易,需要进行长期的努力和学习。以下是成为一名优秀的程序员的攻略: 1. 基础扎实 基础扎实是成为一名优秀程序员的必要条件,包括但不限于以下方面: 编程语言基础:熟练掌握至少一门主流编程语言,包括其语法、数据类型、变量、运算符、流程控制等基础知识。 数据结构和算法:熟悉常见的数据结构和算法,掌握它们的时…

    Java 2023年5月26日
    00
  • Struts拦截器实现拦截未登陆用户实例解析

    Struts拦截器实现拦截未登录用户实例解析 什么是Struts拦截器? Struts2拦截器是请求处理流程中的组件,它可以拦截一个请求和响应,也可以在一个请求被处理前或被处理后插入一些处理逻辑。对于网站的作者和开发人员来说,Struts2拦截器可以帮助我们快速构建一个完整的Web应用。 Struts拦截器如何实现拦截未登录用户? Struts2开发框架允许…

    Java 2023年5月20日
    00
  • java 将字符串、list 写入到文件,并读取内容的案例

    一、将字符串写入文件并读取内容的案例 将字符串写入文件 import java.io.File; import java.io.FileWriter; import java.io.IOException; public class StringToFileExample { public static void main(String[] args) { …

    Java 2023年5月19日
    00
  • java实现KFC点餐系统

    Java实现KFC点餐系统 系统功能 KFC点餐系统是一款简单的餐饮点餐系统,具备以下功能: 浏览菜单:按照品类和价格等条件进行筛选、搜索。 点菜:选择想要的菜品和数量,加入购物车。 查看购物车:查看购物车中的点菜情况,可以修改数量和删除。 下单支付:填写订单信息,选择支付方式并完成支付。 系统架构 KFC点餐系统采用B/S架构模式,使用Java Web技术…

    Java 2023年5月23日
    00
  • Java学习笔记之Maven篇

    Java学习笔记之Maven篇 什么是Maven? Maven 是一个基于项目对象模型(POM),用于构建 Java 项目的构建工具。 Maven 的主要优势是能够管理项目的依赖和版本号,能够自动下载依赖、包含依赖的 JAR 文件以及项目生成的 WAR 和 JAR 文件。 Maven 的安装 下载 Maven 安装包,下载地址为:https://maven.…

    Java 2023年5月19日
    00
  • win10 java(jdk安装)环境变量配置和相关问题

    下面是关于win10 java环境变量配置和相关问题的详细攻略: 1. 下载和安装jdk 首先,我们需要下载并安装Java Development Kit (JDK)。访问Oracle官网下载适合您系统的版本,然后按照安装程序的提示安装即可。安装后可以检查一下是否安装成功,Windows命令行下输入java -version,如果能输出Java版本号,则说明…

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