如何在 Spring Security 中更改默认用户和密码?
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实标准。 Spring Security 是一个专注于为Java应用程序提供身份验证和授权的框架。与所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求。 Spring Security 的一些关键特性是:
- 对身份验证和授权的全面且可扩展的支持
- 防止会话固定、点击劫持、跨站点请求伪造等攻击
- Servlet API 集成
- 与 Spring Web MVC 的可选集成
在本文中,我们将讨论如何在 Spring Security 中更改默认用户和密码。 spring security中更改默认用户和密码有两种方式
- 方法 1:更改应用程序属性文件
- 方法 2:创建自定义带注释的 EnableWebSecurity 类
更改 spring 项目的应用程序属性是覆盖默认用户名和密码的最简单方法之一。让我们讨论
Note: First we need to establish the spring application in our project.
Spring Initializr 是一个基于 Web 的工具,我们可以使用它轻松生成 Spring Boot 项目的结构。它还为元数据模型中表达的项目提供各种不同的功能。该模型允许我们配置 JVM 支持的依赖项列表。在这里,我们将使用 spring 初始化程序创建应用程序的结构。
第 1 步:转到 Spring Initializr
根据要求填写详细信息。对于此应用程序:
Project: Maven
Language: Java
Spring Boot: 2.4.12
Packaging: JAR
Java: 8
Dependencies: Spring Web, Spring Security
单击生成将下载启动项目。
第 2 步:解压缩 zip 文件。现在打开一个合适的 IDE,然后转到 File > New > Project from existing sources > Spring-boot-app 并选择 pom.xml。单击提示上的导入更改并等待项目同步,如下图所示,
Note: In the Import Project for Maven window, make sure you choose the same version of JDK which you selected while creating the project.
第 3 步:转到 src > main > Java > com.gfg.Spring.boot.app 并运行主应用程序
SpringBootApp 应用程序。Java
Java
@SpringBootApplication
public class SpringBootAppApplication {
public static void main(String[] args) {
SpringBootAppApplication.run(SpringBootAppApplication.class, args);
}
}
Java
@RestController
public class controller {
@GetMapping("/delete")
public String delete()
{
return "This is the delete request";
}
}
Java
@EnableWebSecurity
public class config extends WebSecurityConfigurerAdapter {
// Adding the roles
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("Zack")
.password("aayush")
.roles("admin_role")
.and()
.withUser("Aayush")
.password("Saini")
.roles("student_role");
}
// Configuring the api
// according to the roles.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
httpBasic()
.and()
.authorizeRequests()
.antMatchers("/delete").hasRole("admin_role")
.and()
.formLogin();
}
// Function to encode the password
// assign to the particular roles.
@Bean
public PasswordEncoder getPasswordEncoder(){
return NoOpPasswordEncoder.getInstance();
}
}
终端输出:
方法 1:更改应用程序属性文件
Spring security 生成的默认密码为了覆盖我们必须在 applications.properties 文件中配置我们自己的用户名和密码
应用程序.properties
spring.security.user.name=Aayush
spring.security.user.password=12
现在运行主应用程序
终端输出:
我们可以看到在这种情况下没有生成默认密码,因为我们已经覆盖了默认密码。现在转到任何浏览器并键入 localhost:8080 并尝试访问任何我们无法访问的 API 首先我们必须绕过安全性。
用户名和密码与我们在 application.properties 文件中提到的相同。
方法 2 :创建自定义注释 EnableWebSecurity 类
转到 src > main > Java > com.gfg.Spring.boot.app 并创建两个Java文件,一个是控制器。 Java ,另一个是配置。Java
控制器。Java
Java
@RestController
public class controller {
@GetMapping("/delete")
public String delete()
{
return "This is the delete request";
}
}
上面的Java文件用于设置控制器以处理来自客户端的传入请求。现在我们必须配置我们将使用配置的请求。 Java文件。
配置。Java
Java
@EnableWebSecurity
public class config extends WebSecurityConfigurerAdapter {
// Adding the roles
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("Zack")
.password("aayush")
.roles("admin_role")
.and()
.withUser("Aayush")
.password("Saini")
.roles("student_role");
}
// Configuring the api
// according to the roles.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
httpBasic()
.and()
.authorizeRequests()
.antMatchers("/delete").hasRole("admin_role")
.and()
.formLogin();
}
// Function to encode the password
// assign to the particular roles.
@Bean
public PasswordEncoder getPasswordEncoder(){
return NoOpPasswordEncoder.getInstance();
}
}
WebSecurityConfigureAdapter 类用于配置传入的请求,主要有两种方法用于配置。第一种方法用于为spring应用服务器添加角色,另一种方法用于根据角色区分请求。现在运行spring应用程序的主应用程序
Note: There is no default password is generated because we have already used external configuration for handling the user credentials.
在 Postman 中测试 API
转到邮递员并输入 localhost:8080/delete
使用管理员角色: