Spring Security 基础教程 -- 自定义用户名密码
Spring Security 简介
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。 它是用于保护基于 Spring 的应用程序的实际标准。
Spring Security 是一个框架,致力于为 Java 应用程序提供身份验证和授权。 像所有 Spring 项目一样,Spring Security 的真正强大之处在于可以轻松扩展以满足自定义要求。
特点
-
对身份验证和授权的全面且可扩展的支持
-
防御会话固定,点击劫持,跨站点请求伪造等攻击
-
Servlet API 集成
-
与 Spring Web MVC 的可选集成
Spring Security 官网:
https://spring.io/projects/spring-security
https://github.com/spring-projects/spring-security
Spring Security 初体验
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
写一个 Controller 类:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "Hello Security!";
}
}
运行项目,访问http://localhost:8080/hello
,回车,如下图:
只要在项目中间加入了 Spring Security 依赖,所有的地址请求都受到访问控制。
在没有手动设置用户名和密码的时候,默认用户名为 user
,默认密码是一个随机字符串,被打印在控制台中:
输入默认用户名和默认密码,就能访问 /hello 接口了:
每次使用默认密码,十分麻烦。接下来就自定义用户名和密码。
Spring Security 手动设置用户名和密码
有两种方式来设置用户名和密码,一是在 application.properties 文件中配置,二是写一个 config 类,继承 WebSecurityConfigurerAdapter ,重写方法 configure(AuthenticationManagerBuilder auth) 来设置。
方法一:application.properties 文件中配置
配置如下:
spring.security.user.name=user
spring.security.user.password=123456
# 指定用户角色
spring.security.user.roles=admin
三行配置搞定。需要注意的是,需要给用户指定角色,在 Spring Security 中,是通过用户的角色进行访问权限控制的。
方法二:写一个 config 类
写一个 config 类,继承 WebSecurityConfigurerAdapter ,重写方法 configure(AuthenticationManagerBuilder auth) :
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/**
* 这是一个过期的方法
* 指明密码不用加密
*/
@Bean
PasswordEncoder passwordEncoder(){
return NoOpPasswordEncoder.getInstance();
}
/**
* 定义两个用户,并设置密码和角色
* 从 Spring5.0 开始,密码必须要加密
* 基于内存的用户认证
* @param auth
* @throws Exception
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin")
.password("123456")
.roles("admin")
.and()
.withUser("user1")
.password("123")
.roles("user");
}
}
上面,创建了两个用户:admin、user1,并分别赋予角色 admin 和 user 。
每天学习一点点,每天进步一点点。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!