📜  Spring – 在 Spring Security 中添加角色

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

Spring – 在 Spring Security 中添加角色

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

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

在本文中,我们将讨论如何在 Spring Security 中添加角色。在几乎每个 Web 应用程序中,我们进行身份验证的第一步是每个想要访问 Web 应用程序但考虑到学生和教师都在使用该网站的大学应用程序的人的第一个重要步骤。所有教师都有额外的访问权限,比如他们可以删除特定学生记录的记录,但学生不能这样做。现在想想这怎么可能?这只有在角色/删除请求不同时才有可能,只能由高优先级角色提出,而不是由较低优先级角色提出。在这种情况下,学生被设置为低优先级角色,而教师被设置为最优先角色。下面讨论如何在spring web应用程序中添加角色。

分步实施

第 1 步:转到 Spring Initializr

根据要求填写详细信息。对于此应用程序:

Project: Maven
Language: Java
Spring Boot: 2.2.8
Packaging: JAR
Java: 8
Dependencies: Spring Web

第 2 步:单击 Generate 将下载启动项目。

第三步:解压压缩包。现在打开一个合适的 IDE,然后转到File > New > Project from existing sources > Spring-boot-app 并选择 pom.xml 。点击提示导入更改,等待项目同步,如下图所示:

第 4 步:现在转到 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
@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();
    }
}


上面的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

使用管理员角色:

使用学生角色: