【Spring】springSecurity使用

一、基本配置

1. 引入依赖

在Spring Boot项目中,使用Spring Security首先需要引入相应的依赖。在pom.xml中添加spring-boot-starter-security依赖:

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-security</artifactId>  
</dependency>
2. 配置安全规则

Spring Security提供了多种配置安全规则的方式,包括使用Java配置类、注解或XML配置文件。在Spring Boot项目中,通常使用Java配置类来配置安全规则。

通过继承WebSecurityConfigurerAdapter类并重写其configure方法,可以定义用户认证和授权的相关规则。例如:

@Configuration  
@EnableWebSecurity  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  @Autowired  private UserDetailsService userDetailsService;  @Override  protected void configure(HttpSecurity http) throws Exception {  http  .authorizeRequests()  .antMatchers("/login", "/register").permitAll() // 允许匿名访问登录和注册页面  .anyRequest().authenticated() // 其他请求都需要认证  .and()  .formLogin()  .loginPage("/login") // 自定义登录页面  .permitAll()  .and()  .logout()  .permitAll(); // 允许匿名用户访问注销URL  }  @Autowired  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {  auth  .userDetailsService(userDetailsService)  .passwordEncoder(passwordEncoder()); // 使用密码编码器  }  @Bean  public PasswordEncoder passwordEncoder() {  return new BCryptPasswordEncoder(); // 使用BCrypt进行密码加密  }  
}

二、认证过程

Spring Security的认证过程通常涉及以下几个步骤:

  1. 用户提交认证信息:用户通过表单或其他方式提交用户名和密码等认证信息。

  2. AuthenticationFilter拦截请求:Spring Security中的UsernamePasswordAuthenticationFilter(或其他自定义的认证过滤器)会拦截用户的登录请求。

  3. 封装认证信息:过滤器将请求中的认证信息封装成UsernamePasswordAuthenticationToken对象。

  4. 调用AuthenticationManager:将封装好的AuthenticationToken传递给AuthenticationManager进行认证。

  5. 认证提供者执行认证AuthenticationManager会调用一个或多个AuthenticationProvider进行实际的认证操作。AuthenticationProvider会调用UserDetailsService来获取用户信息,并与提交的认证信息进行比对。

  6. 认证成功或失败:如果认证成功,会将用户的认证信息封装成Authentication对象,并存储在SecurityContextHolder中,供后续操作使用;如果认证失败,则抛出异常,并由Spring Security处理相应的错误响应。

三、授权过程

授权过程是在用户认证成功后进行的,用于控制用户对资源的访问权限。

  1. 访问资源:用户尝试访问某个受保护的资源。

  2. 拦截器拦截请求:Spring Security中的拦截器(如FilterSecurityInterceptor)会拦截用户的请求。

  3. 获取所需权限:拦截器会调用FilterInvocationSecurityMetadataSource来获取被拦截URL所需的全部权限。

  4. 访问决策:拦截器会调用AccessDecisionManager进行访问决策。AccessDecisionManager会根据用户的认证信息、请求的URL和配置的权限规则来判断用户是否有权访问该资源。

  5. 授权成功或失败:如果授权成功,用户可以继续访问资源;如果授权失败,则抛出异常,并由Spring Security处理相应的错误响应。

四、其他功能

除了基本的认证和授权功能外,Spring Security还提供了许多其他安全相关的功能,如:

  • 防止跨站请求伪造(CSRF):Spring Security可以自动为表单添加CSRF令牌,并验证提交请求中的令牌值,以防止CSRF攻击。
  • 会话管理:Spring Security提供了会话固定保护、会话超时等会话管理功能。
  • 加密和签名:Spring Security支持使用加密算法对敏感信息进行加密,以及使用签名算法对消息进行签名和验证,以确保信息的机密性和完整性。

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

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

相关文章

Kodcloud可道云安装与一键发布上线实现远程访问详细教程

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云&#xff0c;…

唐刘:当 SaaS 爱上 TiDB(一)- 行业挑战与 TiDB 的应对之道

导读 在 TiDB 8.1 发布后&#xff0c;TiDB 展现了强大的支持 SaaS 业务的能力&#xff0c;成为 SaaS 业务数据库的优先选择之一。 本文为“当 SaaS 爱上 TiDB”系列文章的第一篇&#xff0c;系列文章将从技术原理和真实用户体验两个角度深入探讨 TiDB 在 SaaS 业务中的表现&a…

qt gridlayout 应用举例

Qt的GridLayout是一种非常有用的布局管理器&#xff0c;它允许你在一个网格中放置控件&#xff0c;这样你就可以创建出结构清晰、布局整齐的用户界面。下面是一个使用GridLayout的简单例子&#xff0c;展示了如何在一个窗口中放置几个按钮。 #include <QApplication> …

太速科技-3U VPX飞腾处理器刀片计算机

3U VPX飞腾处理器刀片计算机 一 、产品概述 该产品是一款基于国产飞腾FT2000 4核或腾锐D2000 8核的高性能3U VPX刀片式计算机。产品提供了4个x4 PCIe 3.0总线接口&#xff0c;同时可配置为1个x16或2个x8 PCIe3.0接口&#xff0c;因此具有很强的扩展性&#xff0c;极大…

agents 分类

一、分类 自动agent、半自动agent、领域、自定义sop和支持人为干预的agent。 先泼个冷水&#xff0c;目前这些agent项目都是实验品&#xff0c;发展还没有做知识库问答相关开源项目那么成熟&#xff0c; 二、全自动agent autoGPT、loopGPT、babyAGI 全自动agent就是人类不可…

sizeof()

一、题目 *struct T { char a; int *d; int b; int c:16; double e; }; T *p; 在64位系统以及64位编译器下&#xff0c;以下描述正确的是 A: sizeof 24 B: sizeof(p) 24 C: sizeof(p->a) 1 D: sizeof(p->e) 4 二、解析 p是一个指针&#xff0c;指针在32位机器上是…

GEE数据集——全球Ookla 5G 基站地图数据(Ookla 5G Map Data)

Ookla 5G Map Data Ookla 5G 地图数据 Ookla 5G Map™ 于 2019 年 5 月推出,旨在全面展示 5G 技术在全球的扩展情况。在推出之初,该地图突出显示了 17 个国家的 300 项部署,说明了这一变革性技术的初步推广情况。随着时间的推移,该地图已大幅增长,现在包含了来自 142 个…

实例演示Kafka-Stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…

Java中的LinkedList(链表)(如果想知道Java中有关LinkedList的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在Java编程语言中&#xff0c;Java集合框架提供了一组丰富的数据结构&#xff0c;以满足各种应用需求。其中&#xff0c;LinkedList作为一种常用的数据结构&#xff0c;具有独特的优势和广泛的应用场景。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内…

linux radix-tree 基数树实现详解

radix tree&#xff0c;又称做基数树&#xff0c;是一种适合于构建key(index)与value(item)相关联的数据结构。内核中使用非常广泛。本文主要聚焦linux内核基数树的代码实现,大量注释过的代码。 radix-tree组织结构如下: 1、数据结构 /** The bottom two bits of the slot de…

如何通过JSON-RPC向以太坊链发送签名交易数据?

概述 在以太坊开发当中,通过web3.js、ethers.js等提供的API方法,都可以完成与以太坊的转账交易。那么如何通过以太坊JSON-RPC与以太坊进行交易呢? 在以太坊的JSON-RPC当中,有eth_sendRawTransaction这个方法,可以向以太坊网络提交预签名的交易广播。 curl https://main…

IDEA阿里云OSS实现文件上传·解决苍穹外卖图片回显

简单交代配置阿里云OSS的思路 1. 首先去阿里云开通一个OSS服务&#xff0c;配置好一个自己的Bucket 2. 在IDEA配置Bucket 3. 拷贝官网的OSS工具类代码 package com.sky.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSS…

同三维T80001编码器(带屏)系列视频使用操作说明书:高清HDMI编码器,高清SDI编码器,4K超清HDMI编码器,双路4K超高清编码器

同三维T80001编码器&#xff08;带屏&#xff09;系列视频使用操作说明书&#xff1a;高清HDMI编码器&#xff0c;高清SDI编码器&#xff0c;4K超清HDMI编码器&#xff0c;双路4K超高清编码器 同三维T80001编码器&#xff08;带屏&#xff09;系列视频使用操作说明书&#xff1…

【C语言】printf、fprintf、sprintf,scanf、fscanf、sscanf的区别

目录 前言 printf、fprintf、sprintf printf fprintf sprintf scanf、fscanf、sscanf scanf fscanf sscanf 前言 这几个函数曾出现在面试中&#xff0c;因为函数名都差不多&#xff0c;所以很让人迷惑啊~ 下面我们逐个分析。 printf、fprintf、sprintf 这三个函数的主…

子任务:IT运维的精细化管理之道

在当今的企业运营中&#xff0c;信息技术已成为支撑业务发展的核心力量。根据Gartner的报告&#xff0c;IT服务管理&#xff08;ITSM&#xff09;的有效实施可以显著提升企业的运营效率&#xff0c;降低成本高达15%&#xff0c;同时提高服务交付速度和质量。随着业务的复杂性和…

电脑工具箱神器——uTools

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 很多人脑子里都有一些一个月只用两三次的软件&#xff0c;这些软件就这样积满了灰尘&#xff0c;需要的时候又不知道去哪里找。uTools 完美地解决…

笔记:在Entity Framework Core 中,常用Attribute有哪些

一、目的&#xff1a; Entity Framework Core (EF Core) 支持使用属性&#xff08;Attributes&#xff09;来配置模型和映射数据库。这些属性提供了一种声明性的方式来指定如何将类和属性映射到数据库表和列。以下是一些EF Core中常用的属性&#xff1a; 二、实现 1. [Table] …

力扣题解(环绕字符串中唯一的子字符串)

467. 环绕字符串中唯一的子字符串 定义字符串 base 为一个 "abcdefghijklmnopqrstuvwxyz" 无限环绕的字符串&#xff0c;所以 base 看起来是这样的&#xff1a; "...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....". 给你一个字符串 s …

深入理解 MyBatis 的 SqlSession:MyBatis 核心接口全解析

MyBatis 是一个非常流行的 Java 持久层框架&#xff0c;它简化了数据库操作&#xff0c;并且提供了强大的映射特性。在 MyBatis 中&#xff0c;SqlSession 是与数据库交互的核心接口。本文将详细介绍 SqlSession 的功能和使用方法。 什么是 SqlSession&#xff1f; SqlSessio…

MYSQL审批流程判断同一层级审批人是否全部通过审批

在做流程审批的时候&#xff0c;通常会出现某一层有多个审批人的情况&#xff0c;这个时候需要所有人都通过才会进入到下一步 数据结构如下图表格所示 每一个审批申请对应一个apply_id serial_no相同的代表是同一层级审批人 approval_status是审核状态 下面我们可以用一个SQL来…