spring security面经-字节飞书生产力工具后端一面

1 登录流程怎么做的;spring security 做了什么;如何配置 userpassword 校验?用的是什么设计模式?数据量大不大?

登录流程在使用Spring Security时大致如下:

  1. 用户提交凭证:用户通过登录页面或API提交用户名和密码。

  2. 认证过滤器:Spring Security 提供的认证过滤器(如UsernamePasswordAuthenticationFilter)捕获登录请求并提取凭证。

  3. 认证管理器:凭证被传递给认证管理器(AuthenticationManager),它负责进行实际的认证逻辑。

  4. 用户细节服务:认证管理器使用配置的用户细节服务(UserDetailsService)来获取用户信息,并进行凭证校验。

  5. 认证成功或失败:如果认证成功,用户被授予相应的权限并进行后续处理;如果失败,则抛出异常。

Spring Security在此过程中实现了几个重要的安全特性,如:

  • 细节隐藏:隐藏用户存储细节。
  • 密码加密:通常使用加密算法(如BCrypt)来安全地存储和校验密码。
  • 会话管理:管理用户会话和认证状态。
  • 权限控制:控制对资源的访问权限。

为了配置用户名和密码的校验,通常需要:

  • 配置UserDetailsService以提供用户信息。
  • 配置密码加密器,如BCryptPasswordEncoder
  • WebSecurityConfigurerAdapter中配置相应的认证管理器和其他安全设置。

Spring Security使用多种设计模式,其中包括:

  • 装饰者模式:用于扩展或自定义过滤器链。
  • 策略模式:在不同的认证和授权策略之间切换。
  • 工厂模式:创建安全配置和组件。

关于数据量的问题,这通常取决于应用程序的规模和用户基数。Spring Security本身不存储用户数据,它处理的是认证和授权逻辑。用户数据的规模将取决于用户存储的方式和规模。在处理大规模用户数据时,需要考虑数据库的性能和优化。

2 细节问题

2.1 Spring Security 提供的认证过滤器(如UsernamePasswordAuthenticationFilter)捕获登录请求并提取凭证。如何提取凭证

2.2 认证管理器如何认证,这个管理器是可以独立部署的吗

2.3 用户细节服务:认证管理器使用配置的用户细节服务(UserDetailsService)来获取用户信息,并进行凭证校验。这个用来查询数据库嘛?

  1. 提取凭证的过程:在UsernamePasswordAuthenticationFilter中,当一个登录请求到达时,该过滤器会从HTTP请求中提取用户名和密码。这通常是通过读取表单提交的数据或者API请求中的JSON数据来实现的。具体的提取方法取决于请求的格式和配置。

  2. 认证管理器的认证过程AuthenticationManager接收一个Authentication对象(通常是UsernamePasswordAuthenticationToken),其中包含了用户的凭证。它调用配置好的AuthenticationProvider来进行实际的认证过程。每个AuthenticationProvider会检查提供的凭证并返回一个已填充的Authentication对象,如果凭证有效。AuthenticationManager并不是设计为独立部署的服务;它是Spring Security框架的一部分,运行在应用程序的上下文中。

  3. 用户细节服务的作用UserDetailsService接口的主要作用是从数据源(通常是数据库)中检索用户信息。它根据用户名加载用户的详细信息(如密码、角色、是否被锁定等),这些信息随后用于与用户提供的凭证进行比较,以验证用户的身份。在数据库中存储用户信息是一种常见的做法,但UserDetailsService也可以被实现以从其他来源获取用户数据。

3 权限控制:控制对资源的访问权限。如何实现

在Spring Security中,权限控制是通过一系列的拦截器和表达式来实现的,它们决定了用户是否有权访问特定的资源。具体实现通常涉及以下几个方面:

  1. 配置安全拦截:在Spring Security配置中(例如通过继承WebSecurityConfigurerAdapter),你可以定义哪些URL路径应该受保护,以及所需的权限。这通常是使用.antMatchers()方法和相关的权限表达式来完成的。

  2. 方法安全:通过使用注解如@PreAuthorize@PostAuthorize@Secured等,可以在具体的服务或控制器方法上进行细粒度的权限控制。这些注解允许你定义访问特定方法所需的权限。

  3. 角色和权限:通常在用户的身份认证过程中会加载用户的角色和权限。这些角色和权限随后用于评估安全表达式。

  4. 自定义表达式:Spring Security还允许定义自定义的安全表达式,提供更灵活的权限控制。

  5. 访问决策管理器:Spring Security使用访问决策管理器(如AffirmativeBasedConsensusBased)来评估安全表达式,并做出是否允许访问的决策。

通过这些机制,Spring Security能够提供强大而灵活的方式来控制对应用程序资源的访问。

4 Authentication对象和评估安全表达式

4.1 每个AuthenticationProvider会检查提供的凭证并返回一个已填充的Authentication对象,这个Authentication对象包含了哪些信息,会用来干什么

  1. Authentication对象包含的信息Authentication对象是Spring Security中的核心接口之一,用于表示用户的认证信息。它通常包含以下信息:

    • Principal:表示用户的身份,通常是UserDetails对象,包含用户名、密码、权限等信息。
    • Credentials:通常是用户的密码。
    • Authorities:用户拥有的权限,通常表示为一组GrantedAuthority对象。
    • Details:附加信息,如用户的IP地址或请求的详情。
    • Authenticated:一个布尔值,表示用户是否已经被认证。

    Authentication对象在整个安全框架中被用来表示当前用户的安全上下文,用于访问控制和权限检查。

4.2 自定义表达式:Spring Security还允许定义自定义的安全表达式,提供更灵活的权限控制。举个例子

  1. 自定义安全表达式示例:在Spring Security中,你可以定义自己的安全表达式来进行更复杂的权限检查。例如,假设你有一个方法,只有当用户拥有某个权限并且满足某个业务条件时才能访问:

    @PreAuthorize("hasAuthority('ROLE_ADMIN') and @mySecurityService.checkCondition(principal)")
    public void myMethod() {// 业务逻辑
    }
    

    在这个例子中,@PreAuthorize注解使用了一个自定义的表达式,其中@mySecurityService.checkCondition(principal)调用了一个自定义的安全服务(mySecurityService)的方法,以检查当前用户(principal)是否满足特定条件。这样,你就可以将业务逻辑与安全逻辑相结合,实现更灵活的权限控制。

4.2 这里的Authentication会被用来和安全表达式进行匹配对吗?

是的,Authentication对象会被用来与安全表达式进行匹配。在Spring Security中,安全表达式(如在@PreAuthorize, @Secured, @RolesAllowed等注解中使用的表达式)通常依赖于Authentication对象中的信息来决定是否授权访问特定资源或执行特定操作。这些表达式会检查Authentication对象中的principal(用户身份)、authorities(授权信息)、credentials(凭证),以及其他细节,来判断用户是否满足给定的安全要求。

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

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

相关文章

喜报!博睿数据荣获“2023年度卓越数字创新企业”

12月5日,由《经济观察报》主办的“2023年创新峰会”在北京隆重举办,会议邀请行业专家和领军企业,站在未来的视角,为当下的市场发展提供洞见。期间,备受瞩目的2023年度卓越创新案例评审结果正式发布,博睿数据…

MES管理系统在生产计划排程中的应用与价值

随着制造业市场竞争的日益激烈和客户需求的多样化,传统的生产计划排程方式已经无法满足企业的需求。为了提升生产计划的效率和准确性,越来越多的企业开始引入MES管理系统这一先进的工具。那么,MES管理系统到底是什么,又是如何解决…

揭秘AI魔法绘画:Stable Diffusion引领无限创意新纪元

文章目录 1. 无限的创意空间2. 高效的创作过程3. 个性化的艺术表达4. 跨界合作的可能性5. 艺术教育的革新6. 艺术市场的拓展 《AI魔法绘画:用Stable Diffusion挑战无限可能》编辑推荐内容简介作者简介精彩书评目录前言/序言本书读者对象学习建议获取方式 随着科技的…

Hbase JAVA API 增删改查操作

Hbase JAVA API 增删改查操作 创建maven项目 添加pom依赖 ​ 打开https://mvnrepository.com/ 搜索hbase 选择hbase-client, 2.2.4版本&#xff0c;点进去复制依赖代码 <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client…

在Ubuntu系统上部署Docker和Docker-Compose服务(实战篇)

前言 在这篇文章中&#xff0c;我们将从查看防火墙状态开始&#xff0c;逐步引导大家完成Docker和Docker-Compose的安装、配置以及使用过程。通过学习这些关键步骤&#xff0c;你将更加熟练地运用容器技术&#xff0c;为未来的项目提供更便捷的开发和部署方案。 无论你是刚刚…

RocketMq环境搭建

目录 MQ作用 RocketMQ背景 MQ对比 RocketMQ环境搭建 搭建dashboard可视化界面 MQ作用 异步解耦削峰 RocketMQ背景 ​ RocketMQ是阿里巴巴开源的一个消息中间件&#xff0c;在阿里内部历经了双十一等很多高并发场景的考验&#xff0c;能够处理亿万级别的消息。2016年开源…

编程实战:类C语法的编译型脚本解释器(二)Token和变量

系列入口&#xff1a;编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;系列&#xff09;-CSDN博客 现在开始解释所有的设计思想和与源代码。先从外围入手&#xff0c;最后会进入到一个巨大的解析语法的类。 本文介绍TOKEN和变量。 目录 一、TOKEN 1.1 定义Token类…

跨端的三种方案原理和对比(WebView,ReactNative,Flutter)

一、定义 WebView WebView是什么&#xff1f; 答&#xff1a; 第一代跨平台框架&#xff0c;代表者为&#xff1a;PhoneGap、微信小程序。 WebView标签是一种用于在网页中嵌入浏览器窗口的HTML元素。它的底层原理是通过原生平台提供的浏览器引擎来实现网页的渲染和交互。 …

windows下DSS界面本地集成linkis管理台

说明&#xff1a;当前开发环境为windows&#xff0c;node版本使用16.15.1。启动web时&#xff0c;确保后端服务已准备就绪。 1.linkis web编译 #进入项目WEB根目录 $ cd linkis/linkis-web #安装项目所需依赖 $ npm install参考官方编译说明&#xff0c;windows下编译一直异常…

代理IP和网络加速器的区别有哪些

随着互联网的普及&#xff0c;越来越多的人开始使用网络加速器来提高网络速度。然而&#xff0c;很多人并不清楚代理IP和网络加速器之间的区别。本文将详细介绍两者的概念及区别。 一、代理IP 代理IP是一种通过代理服务器进行网络连接的方式。在使用流冠代理IP时&#xff0c;用…

数据结构算法-希尔排序

引言 在一个普通的下午&#xff0c;小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐&#xff0c;更是要用扑克牌来决定谁是真正的“大老板”。 然而&#xff0c;小明的牌就像刚从乱麻中取出来的那样&#xff0c;毫无头绪。小森的牌也像是被小丑掷…

视觉检测系统在半导体行业的应用

一、半导体产业链概述 半导体产业链是现代电子工业的核心组成部分&#xff0c;涵盖了从原材料到最终产品的整个生产过程。这个产业链主要分为以下几个环节&#xff1a; 1.原材料供应&#xff1a;半导体行业的基石是半导体材料&#xff0c;如硅片、化合物半导体等。这些材料需要…

搭建CIG容器重量级监控平台

CIG简介 CIG监控平台是基于CAdvisor、InfluxDB和Granfana构建的一个容器重量级监控系统&#xff0c;用于监控容器的各项性能指标&#xff0c;通过三者的结合&#xff0c;CIG监控平台可以实现对容器性能的全面监控和可视化展示&#xff0c;为容器的性能和运行状态提供了一个全面…

HTML5+CSS3+JS小实例:焦点图波浪切换动画特效

实例:焦点图波浪切换动画特效 技术栈:HTML+CSS+JS 字体图标库:Font Awesome 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name=&…

★538. 把二叉搜索树转换为累加树

538. 把二叉搜索树转换为累加树 在Java中使用类变量&#xff0c;就相当于用了C 中的全局变量。 第一次在Java中用全局变量的知识。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNod…

前端React基础面试题

1,说说react里面bind函数与箭头函数 bind 由于在类中,采用的是严格模式,所以事件回调的时候会丢失this指向,指向的undefined,需要使用bind来给函数绑定上当前实例的this指向。 箭头函数的this指向上下文,所以永久能拿到当前组件实例的。this指向我们可以完美的使用箭头…

simulink同步机储能二次调频AGC,连续扰动负荷,储能抑制频率波动振荡震荡

若想观测二次调频性能&#xff0c;&#xff0c;切换为单一扰动即可&#xff0c;如下图所示。 AGC调速器都已经封装。后续也可加入风机光伏水电等资源。

ResNet(残差网络)详解

ResNet&#xff08;残差网络&#xff09;详解 ResNet&#xff08;残差网络&#xff09;是一种深度神经网络架构&#xff0c;主要用于解决深度学习中的梯度消失和梯度爆炸问题&#xff0c;特别在深层网络的训练中表现出色。 ResNet 的核心概念 1. 残差学习 在传统的深度神经…

【技术分享】ORACLE数据库相关操作

【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502[欢迎关注微信公众号&#xff1a;厦门微思网络] -- 截断表 TRUNCATE TABLE TABLE_NAME; -- …

java面试题-谈谈sql优化-mysql

远离八股文&#xff0c;面试大白话&#xff0c;通俗且易懂 看完后试着用自己的话复述出来。有问题请指出&#xff0c;有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来&#xff0c;大家一起解决。 这是面试总结出来的几点&#xff0c;每次问道都是这么回…