当前位置: 首页 > news >正文

Spring Security使用基本认证(Basic Auth)保护REST API

基本认证概述

基本认证(Basic Auth)是保护REST API最简单的方式之一。它通过在HTTP请求头中携带Base64编码过的用户名和密码来进行身份验证。由于基本认证不使用cookie,因此没有会话或用户登出的概念,这意味着每次请求都必须包含身份验证信息。

Maven依赖

要在Spring Boot项目中使用Spring Security,需要添加以下Maven依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Security配置

接下来,我们将配置Spring Security以使用内存中的基本认证。创建一个名为SpringSecurityConfig的类,并加入如下代码:

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.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
@EnableWebSecurity
public class SpringSecurityConfig {@Beanpublic static PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.csrf().disable().authorizeHttpRequests(authorize -> authorize.anyRequest().authenticated()).httpBasic(Customizer.withDefaults());return http.build();}@Beanpublic UserDetailsService userDetailsService() {UserDetails ramesh = User.builder().username("ramesh").password(passwordEncoder().encode("password")).roles("USER").build();UserDetails admin = User.builder().username("admin").password(passwordEncoder().encode("admin")).roles("ADMIN").build();return new InMemoryUserDetailsManager(ramesh, admin);}
}

默认情况下,Spring Security同时启用了基于表单的身份验证和HTTP基本认证。上述配置中,我们通过调用httpBasic()方法仅启用了基本认证。此外,我们还定义了一个UserDetailsService实现,用于内存中的用户管理。

创建REST API

为了测试上面的Spring Security配置,创建一个简单的REST API并使用Spring Security加以保护。当向Spring Boot项目添加Spring Security依赖后,默认所有应用URL都会受到保护。

import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class WelComeController {@GetMapping("/greeting")public String greeting(Authentication authentication) {return "Spring Security In-memory Authentication Example - Welcome " + authentication.getName();}
}

使用Postman测试REST API

要测试REST API,需要在请求头中传递Base64编码过的用户名和密码,即基本认证。
在这里插入图片描述

如果未提供这些凭证,将收到401状态码,这表明Spring Security正在正确地保护API。
在这里插入图片描述

总结

通过本教程,您应该了解了如何配置Spring Security的内置HTTP基本认证来保护REST API。

基本认证虽然简单,但在某些场景下仍是非常实用的选择。

http://www.lryc.cn/news/488073.html

相关文章:

  • MySQL —— explain 查看执行计划与 MySQL 优化
  • 出海第一步:搞定业务系统的多区域部署
  • 二手手机回收小程序,一键便捷高效回收
  • 开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现离线推理-性能分析(四)
  • 深入解析小程序组件:view 和 scroll-view 的基本用法
  • 【汇编语言】转移指令的原理(三) —— 汇编跳转指南:jcxz、loop与位移的深度解读
  • opencv-python 分离边缘粘连的物体(距离变换)
  • 机器学习杂笔记1:类型-数据集-效果评估-sklearn-机器学习算法分类
  • Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能
  • 数据结构在二叉树Oj中利用子问题思路来解决问题
  • 华为openEuler考试真题演练(附答案)
  • 生成自签名证书并配置 HTTPS 使用自签名证书
  • 物联网核心安全系列——智能汽车安全防护的重要性
  • 数据库视图
  • 从传统分析到智能问数,打造零门槛数据分析方案
  • java 设计模式 模板方法模式
  • 基于UDP和TCP实现回显服务器
  • 在 CentOS 系统上直接安装 MongoDB 4.0.25
  • Android和IOS的区别
  • 数据库基础(MySQL)
  • Vue前端开发子组件向父组件传参
  • javaScript语法基础(函数,对象,常用类Array,String,Math和Date)
  • WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理
  • k8s-NetworkPolicy
  • 【C++】踏上C++学习之旅(九):深入“类和对象“世界,掌握编程的黄金法则(四)(包含四大默认成员函数的练习以及const对象)
  • C++——智能指针剖析
  • 241119.LeetCode——383.赎金信
  • 基于SSM的农家乐管理系统+论文示例参考
  • 用 Python 从零开始创建神经网络(九):反向传播(Backpropagation)(还在更新中。。。)
  • Flink是如何实现 End-To-End Exactly-once的?