Spring Boot 如何使用 Spring 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>

在上面的依赖中,我们添加了 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 {
    
    
    
}

接下来,我们可以重写 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");
    }
}

在上面的代码中,我们使用 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);
    }

}

在上面的示例代码中,我们创建了一个名为 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 应用程序中,以确保应用程序的安全性。

猜你喜欢

转载自blog.csdn.net/it_xushixiong/article/details/131353257