📜  如何在 Spring Security 中更改默认用户和密码?

📅  最后修改于: 2022-05-13 01:55:10.214000             🧑  作者: Mango

如何在 Spring Security 中更改默认用户和密码?

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实标准。 Spring Security 是一个专注于为Java应用程序提供身份验证和授权的框架。与所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求。 Spring Security 的一些关键特性是:

  1. 对身份验证和授权的全面且可扩展的支持
  2. 防止会话固定、点击劫持、跨站点请求伪造等攻击
  3. Servlet API 集成
  4. 与 Spring Web MVC 的可选集成

在本文中,我们将讨论如何在 Spring Security 中更改默认用户和密码。 spring security中更改默认用户和密码有两种方式

  • 方法 1:更改应用程序属性文件
  • 方法 2:创建自定义带注释的 EnableWebSecurity 类

更改 spring 项目的应用程序属性是覆盖默认用户名和密码的最简单方法之一。让我们讨论

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。单击提示上的导入更改并等待项目同步,如下图所示,

第 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应用程序的主应用程序

在 Postman 中测试 API

转到邮递员并输入 localhost:8080/delete

使用管理员角色: