Spring Security 简单了解使用

本文,我们来说说 Spring Security

spring security 是什么?

Spring Security 是一个基于 Spring 框架的安全框架 ,提供了一套安全性认证和授权的解决方案,用于保护 Web 应用程序和服务。

Spring Security 提供了多种身份验证和授权方式,例如基于表单的身份验证和授权方式、基于 HTTP 基本身份验证、基于 OAuth2 的身份验证等。

Spring Security 还提供了许多常见的安全特性,比如防止跨站点请求伪造 CSRF 攻击、防止点击劫持等。

CSRF -> Cross-Site Request Forgery

Spring Security 核心概念

它有三个核心概念,如下:

概念 说明
Principle 代表用户的对象 Principle(User),不仅指人类,还包括一切可以用于验证的设备。
Authority 代表用户的角色 Authority(Role),每个用户都应该有一种角色,例如管理员或者是会员。
Permission 代表授权,复杂的应用环境需要对角色的权限进行表述。

AuthorityPermission 是两个完全独立的概念,两者没有必然的联系。它们直接需要通过配置进行关联,可以是自己定义的各种关系。

案例

在项目 了解 MyBatis 的基础上,我们来进行测试。

首先,我们添加依赖:

xml 复制代码
<!-- Spring Security -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

我们启动项目,可以在控制台上看到动态生成的访问密码:

默认的用户名是 user

这个时候,我们在浏览器上访问用户列表接口 http://localhost:8080/api/user/,会自动跳转到登陆页面。

输入默认用户名 user 和上图中动态生成的密码 3019398a-a10f-43e9-9e21-199f6892f689,登陆成功后,自动跳转到接口 http://localhost:8080/api/user/

当然,我们也可以自定用户名和密码,不然每次启动项目后,密码都需要重新生成一遍,着实尴尬。

自定义用户名和密码

方式一:application.properties 文件内配置:

bash 复制代码
spring.security.user.name=jimmy
spring.security.user.password=123456

重启项目,输入用户名 jimmy,密码 123456 即可授权登陆。

如果不生效,请清空浏览器上的缓存

方式二: Java 上配置用户名和密码:

在包 config 下,新建文件 SecurityConfig.java,如下:

java 复制代码
package com.launch.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        // 用户存在内存中
        auth.inMemoryAuthentication()
                .withUser("jimmy")
                .password(encoder.encode("111111"))
                .roles("admin")
                .and()
                .withUser("kimmy")
                .password(encoder.encode("222222"))
                .roles("user");
    }

    @Bean
    PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

注意,密码需要加密,如 encoder.encode("222222")

重启项目,清空浏览器缓存,输入用户名/密码 - kimmy / 222222 或者 jimmy / 111111 即可登陆。

PostMan 上统一设定凭证

在现实的开发中,我们使用 Postman 工具调试的多点,那么我们怎么操作呢?

第一步,设定环境变量,这里设置 usernamepassword 就行了:

这里设置的变量名为 username 和 password

然后,我们在接口上配置认证信息,比如这里的获取用户列表的接口:

选择 Type 为 Basic Auth,填写上面第一步👆设定的变量 {{username}}{{password}}

参考

相关推荐
一 乐2 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
Boilermaker19922 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维2 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
C_心欲无痕2 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫2 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
alonewolf_993 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子3 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
码事漫谈3 小时前
Protocol Buffers 编码原理深度解析
后端
sheji34163 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
码事漫谈3 小时前
gRPC源码剖析:高性能RPC的实现原理与工程实践
后端