ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 问题描述 有的同学可能会遇到:当项目引入如下的spring-boot-starter-actuator坐标之后,项目的服务如“/user/*”和“/role/*”无法被访问到,返回401无权访问的问题。 ~~~ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ~~~ ## 原因 这是因为你的项目同时引入了spring-boot-starter-security,二者同时引入,就会默认开启basicAuth的权限验证,导致本来公开访问的接口需要携带用户名密码才能访问。 ~~~ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ~~~ > 笔者根据经验,为您准备了如下的一系列方案,说实话基于不同的场景,需要使用不同的方法。根据版本差异也有可能部分解决方案失效,可以根据自己项目情况选择适用。 ## 解决方案一 ~~~ spring: security: basic: enabled: false #关闭Basic认证 ~~~ ## 解决方案二 * 如果你的项目没有用到Spring Security,就将spring-boot-starter-security删除 * 或者我的项目暂时没有用到Spring Security管理接口权限(当前章节没用到,后面会结合网关使用Spring Security)。只是用到了Spring Security进行密码加密。我们就引入对应的子包即可,不要引入spring-boot-starter-security。**因为spring-boot-starter-security有自动装配机制,自动就把默认的安全权限给你配置上了。** 比如引入子包spring-security-core ~~~ <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.2.2.RELEASE</version> </dependency> ~~~ ## 解决方案三 * 如果你的项目确实使用到了Spring Security,请通过Spring Security的配置,正确的将项目接口访问权限开放。 * 需要你掌握Spring Security的配置方法,下面只是一个例子。自己还需要根据自己项目情况配置权限。**去学Spring Security。既然用到,就要学到** ~~~ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/actuator/**").permitAll() .anyRequest().authenticated(); } } ~~~ ## 解决方案四 这种方法很简单,但经过笔者测试在当前版本下不生效。网上有人使用是可以生效的,应该是版本差异,所以记在这里备选。 ~~~ management: security: enabled: false ~~~ ## 解决方案五 这是一种比较通用的,防止Spring Security自动装配的方法。但是笔者测试,加入spring-boot-starter-actuator后,该配置失效。可能也是版本差异的问题,作为一种解决方案提供大家实验。 ![](https://img.kancloud.cn/b5/86/b58625387ad6a320ba1092c4d47c3b1b_655x241.png)