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 {@Overrideprotected 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();}@Autowiredpublic 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 {@Overrideprotected 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();}@Autowiredpublic 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 应用程序中,以确保应用程序的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1895.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器编程:数据库连接池

引言&#xff1a; 数据库连接池和线程池的思想一样&#xff0c;是为了避免频繁创建和销毁数据库连接导致的性能开销。如果一个项目频繁的需要访问数据库&#xff0c;那么它就有可能需要频繁的创建/销毁数据库连接&#xff0c;那么我们可以采用数据库连接池的技术&#xff0c;在…

【几何数学】【Python】【C++】将线段沿着线段方向延长一定长度,求新的点

p1点和p2点是一条线段的两端&#xff0c;沿着p1指向p2的方向&#xff0c;将线段长度延伸长度x&#xff0c;求延伸后的点ep。如下图&#xff1a; Python代码&#xff1a; import mathdef extend_line_segment(p1, p2, extension_length):"""延伸线段长度并返回…

Redis各数据类型操作命令

一、Redis数据类型及命令 &#xff08;一&#xff09;String 类别命令描述命令示例备注取/赋值操作赋值set key valueset lclkey lclvalue取值 get keyget lclkey取值并赋值getset key valuegetset lclkey1 lclvalue1获取原值&#xff0c;并设置新的值仅当不存在时赋值setnx k…

多元回归预测 | Matlab海洋捕食者算法(MPA)优化极限学习机ELM回归预测,MPA-ELM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab海洋捕食者算法(MPA)优化极限学习机ELM回归预测,MPA-ELM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% …

Java 实现word、excel、ppt、txt等办公文件在线预览功能!

如何用 Java 实现word、excel、ppt、txt等办公文件在线预览功能&#xff1f;本文告诉你答案&#xff01; java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求&#xff0c;网上些公司专门提供这样的服务&#xff0c;不过需要收费。 如果想要免费的&#xff0c;…

设计模式第19讲——命令模式(Command)

目录 一、什么是命令模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 代码结构 5.1 抽象命令&#xff08;Command&#xff09;——Command 5.2 接收者&#xff08;Receiver&#xff09;——Chef 5.3 具体命令&#xff08;Co…

【读书笔记】《软件工程导论》

目录 一、软件工程概述 二、启动阶段 三、计划阶段 四、实施阶段 五、收尾阶段 一、软件工程概述 软件危机&#xff1a;在计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的产生与自身的特点有关&#xff0c;还与软件开发、管理的方法不正确有关。 软件危…

Go语言并发微服务分布式高可用

Go语言并发微服务分布式高可用 Go语言基础 环境安装 命令行输入go&#xff0c;当前操作系统Os环境中依赖于PATH指定的日录们去找命令(可执行文件)windows会优先搜索当前日录&#xff0c;当前日录没有才依赖PATH中指定的日录 环境变量: 操作系统运行环境中提前定义好的变量P…

6-js基础-3

JavaScript 基础 - 3 知道什么是数组及其应用的场景&#xff0c;掌握数组声明及访问的语法&#xff0c;具备利用数组渲染柱形图表的能力 今日重点&#xff1a; 循环嵌套数组综合案例 今日单词&#xff1a; 循环嵌套 利用循环的知识来对比一个简单的天文知识&#xff0c;我们…

Scrapy框架之MongoDB通过配置文件管理参数--Linux安装MongoDB--图形管理工具

目录 MongoDB通过配置文件 问题 解决方案 步骤 提示 Linux安装MongoDB 环境 下载依赖与安装包 解压安装 MongoDB GUI管理工具 独立软件GUI软件 Robo 3T使用 VSCode集成GUI插件 MongoDB通过配置文件 问题 启动MongoDB时&#xff0c;编写参数太麻烦 解决方案 通过配…

android h5 宿舍报修管理系统myeclipse开发mysql数据库编程服务端java计算机程序设计

一、源码特点 android h5 宿舍报修管理系统是一套完善的WEBandroid设计系统&#xff0c;对理解JSP java&#xff0c;安卓app编程开发语言有帮助&#xff08;系统采用web服务端APP端 综合模式进行设计开发&#xff09;&#xff0c;系统具有完整的 源代码和数据库&#xff0c;系…

docker网络

一、docker网络概述 1、docker网络实现的原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c; 同时Docker网桥是 每个容器的…