当然!您可以将以下文本直接粘贴到您的 Stack Overflow 问题中:
标题:Spring Security POST 请求因 401 未经授权而失败
描述: 我的 Spring Boot 应用程序遇到问题,其中 POST 请求失败并出现 401 未经授权错误。以下是我的 Spring Security 配置:
package com.spboot.DohaRiff.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SpringSecurityConfig {
SecurityFilterChain securityFilterChain(HttpSecurity http)throws Exception{
http.csrf((csrf) -> csrf.disable())
.authorizeHttpRequests((authorize)->{
authorize.requestMatchers(HttpMethod.POST,"/api/**").hasRole("ADMIN");
authorize.requestMatchers(HttpMethod.PUT,"/api/**").hasRole("ADMIN");
authorize.requestMatchers(HttpMethod.DELETE,"/api/**").hasRole("ADMIN");
authorize.anyRequest().authenticated();
}).httpBasic(Customizer.withDefaults());
return http.build();
}
@Bean
public static PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public UserDetailsService userDetailsService(){
UserDetails hulkNaik = User.builder()
.username("hulkNaik")
.password(passwordEncoder().encode("Pass123"))
.roles("USER")
.build();
UserDetails admin = User.builder()
.username("admin")
.password(passwordEncoder().encode("admin"))
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(hulkNaik,admin);
}
}
这是我尝试在 POST 请求中传递的标头:
{
"id": 4,
"title": "TEST",
"description": "TES",
"userComments": "TEST",
"author": "Host",
"source": "Saped"
}
问题: 使用 Postman 发送 POST 请求时,我收到 401 未经授权错误。不过,我可以使用浏览器登录,没有任何问题。
其他背景:
预期行为: 我希望 POST 请求能够成功进行身份验证和处理,并返回适当的响应。
实际行为: POST 请求返回 401 未经授权错误。
重现步骤:
任何有关解决此问题的见解或建议将不胜感激。谢谢!
您介意分享代码仓库吗?
看起来您没有正确传递
Authorization
标头。由于您已启用基本身份验证,因此请确保添加 Authorization
标头以及以 base64 编码的 username:password
字符串。
例如:
Authorization: Basic ZGVtbzpwQDU1dzByZA==