当前位置:   article > 正文

Spring Boot 如何使用 Spring Security 进行认证和授权_pring-boot-starter-security

pring-boot-starter-security

Spring Boot 如何使用 Spring Security 进行认证和授权

在 Web 应用程序中,认证和授权是非常重要的功能。Spring Security 是一个基于 Spring 框架的强大的安全框架,它提供了完整的认证和授权解决方案,并且可以轻松地集成到 Spring Boot 应用程序中。本文将介绍如何在 Spring Boot 中使用 Spring Security 进行认证和授权,并提供示例代码。

在这里插入图片描述

添加 Spring Security 依赖

首先,我们需要在 pom.xml 文件中添加 Spring Security 依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

在上面的依赖中,我们添加了 spring-boot-starter-security 依赖,它包含了 Spring Security 的所有必要依赖。

配置 Spring Security

接下来,我们需要配置 Spring Security。在 Spring Boot 应用程序中,可以使用 Java 配置或 XML 配置来配置 Spring Security。在本文中,我们将使用 Java 配置。

我们需要创建一个名为 SecurityConfig 的类,并添加 @EnableWebSecurity 注解。这个注解启用了 Spring Security,并自动配置了基本的 Web 安全性。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
}
  • 1
  • 2
  • 3
  • 4
  • 5

接下来,我们可以重写 configure 方法,来配置 Spring Security。例如,我们可以配置基本的认证和授权:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
          .authorizeRequests()
            .antMatchers("/", "/home").permitAll()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
          .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
          .logout()
            .permitAll();
    }
    
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
          .inMemoryAuthentication()
            .withUser("user").password("{noop}password").roles("USER")
            .and()
            .withUser("admin").password("{noop}password").roles("USER", "ADMIN");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

在上面的代码中,我们使用 authorizeRequests 方法配置了 URL 的访问规则。我们允许所有用户访问根路径和 /home 路径,只有具有 ADMIN 角色的用户才可以访问 /admin 路径。对于其他 URL,需要进行认证。

我们使用 formLogin 方法配置了基于表单的身份验证。我们指定了登录页面的 URL 为 /login,并允许所有用户访问该 URL。我们还使用 logout 方法配置了基于表单的注销,允许所有用户注销。

最后,我们使用 configureGlobal 方法配置了用户的身份验证。在这里,我们使用了基于内存的身份验证,指定了两个用户 useradmin,并设置了他们的密码和角色。

示例代码

下面是一个完整的示例代码,演示了如何在 Spring Boot 中使用 Spring Security 进行认证和授权:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
          .authorizeRequests()
            .antMatchers("/", "/home").permitAll()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
          .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
          .logout()
            .permitAll();
    }
    
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
          .inMemoryAuthentication()
            .withUser("user").password("{noop}password").roles("USER")
            .and()
            .withUser("admin").password("{noop}password").roles("USER", "ADMIN");
    }
}

@Controller
public class HomeController {
    
    @GetMapping("/")
    public Stringhome() {
        return "home";
    }
    
    @GetMapping("/admin")
    public String admin() {
        return "admin";
    }
    
    @GetMapping("/login")
    public String login() {
        return "login";
    }
}

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

在上面的示例代码中,我们创建了一个名为 HomeController 的控制器,它包含了三个处理程序方法:homeadminloginhomeadmin 方法返回字符串,表示视图的名称,而 login 方法返回登录页面的视图名称。

我们还创建了一个名为 Application 的 Spring Boot 应用程序类,并在其中定义了 main 方法,以启动应用程序。

在上面的示例代码中,我们使用了 Thymeleaf 模板引擎来渲染视图。我们还可以使用其他模板引擎,例如 JSP 或 FreeMarker。

运行示例代码

要运行上面的示例代码,我们需要执行以下步骤:

  1. 在命令行中进入应用程序的根目录。
  2. 执行 mvn spring-boot:run 命令,以启动应用程序。
  3. 在浏览器中访问 http://localhost:8080/home,可以看到 home 视图。
  4. 在浏览器中访问 http://localhost:8080/admin,由于当前用户没有 ADMIN 角色,会被重定向到登录页面。
  5. 在浏览器中访问 http://localhost:8080/login,输入用户名和密码,即可登录并访问 admin 视图。

结论

在本文中,我们介绍了如何在 Spring Boot 中使用 Spring Security 进行认证和授权。我们添加了 Spring Security 依赖,配置了基本的认证和授权,并提供了示例代码。通过这些步骤,我们可以轻松地将 Spring Security 集成到我们的 Spring Boot 应用程序中,以确保应用程序的安全性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/701976
推荐阅读
相关标签
  

闽ICP备14008679号