新建Spring Boot 3.0 Kotlin REST接口全部返回401错误求助
问题原因
你引入了spring-boot-starter-security依赖,Spring Boot的自动配置会默认启用全局安全认证规则——所有HTTP请求都需要经过身份验证,未携带有效认证信息的请求会直接返回401 Unauthorized。
默认情况下,Spring Security会在应用启动时生成一个随机的用户密码(用户名默认是user,密码会打印在启动日志里,格式类似:Using generated security password: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),但你的curl请求没有携带任何认证信息,所以被拒绝。
解决方案
根据你的需求,有几种处理方式:
1. 临时禁用Spring Security(开发测试用)
如果只是开发阶段需要快速测试接口,可以直接排除Security的自动配置:
修改MyApiApplication.kt,在@SpringBootApplication注解里添加排除项:
package com.my.app.api import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration import org.springframework.boot.runApplication @SpringBootApplication(exclude = [SecurityAutoConfiguration::class]) class MyApiApplication fun main(args: Array<String>) { runApplication<MyApiApplication>(*args) }
2. 配置固定的用户认证信息
如果需要保留基础认证,可以在application.properties里添加用户名和密码:
# 配置Spring Security默认用户 spring.security.user.name=testuser spring.security.user.password=testpass
之后用curl请求时携带认证信息:
curl -v -u testuser:testpass localhost:6020/api/test
3. 自定义安全配置(推荐,灵活控制权限)
创建一个Security配置类,自定义哪些路径需要认证,哪些可以放行:
package com.my.app.api import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.security.config.annotation.web.builders.HttpSecurity import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity import org.springframework.security.web.SecurityFilterChain @Configuration @EnableWebSecurity class SecurityConfig { @Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http .authorizeHttpRequests { auth -> // 放行/api/test路径的所有请求 auth.requestMatchers("/api/test/**").permitAll() // 其他路径需要认证 auth.anyRequest().authenticated() } // 如果不需要表单登录,可以禁用 .formLogin { it.disable() } .httpBasic { it.disable() } return http.build() } }
这个配置会让/api/test下的所有请求无需认证即可访问,其他路径仍需认证。
内容的提问来源于stack exchange,提问作者xgb84j
相关产品推荐
相关产品推荐

