You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:55:21