不得不知道的Spring Security的基本原理

Spring Security 这个类中没有多余的逻辑,都是HttpSecurity内部配置类中重写的方法执行,HttypSecurit的内部配置类就是我们通过HttpSecurity点出来的属性配置,比如:CsrfConfigurer,构建的时候,传入的就是上层配置类的HttpSecurity。,保存了各个SecurtiyConfigure初始化构建的HttpSecurity,httpSecurity经过build后返回的DefaultSecurityFilterChain对象,这个对象中包含的匹配路径,对应的过滤器集合。 阅读详情

微信公众号:Java患者

专注Java领域技术分享

前言

        由于我们的API接口,在服务启动后,是在无保护的状态下。任何人只要知道服务的地址,都可以访问我们开发的这些服务。这种情况在我们真实的企业级应用开发中是不允许的。我们需要对用户进行认证和授权,来保证我们合法的用户和有权限的用户才能访问。

        SpringSecurity这个框架就是来做这种事情的,他提供了3个核心的功能:

  • 认证:就是告诉系统你是谁,实际上就是我们常说的登录。

  • 授权:就是指定当前的用户你能什么,不能干什么。

  • 攻击防护:如果黑客通过伪造身份,我们前面的两种操作就无效了的。而SpringSecurity的核心功能,就是它可以有效防止伪造身份。

Spring Security的默认配置

        默认情况下,在项目中有Spring Security相关的jar包。Spring Security会自动帮我们做一些安全的配置。这时候我们访问我们写的服务时候,它会让我们去填用户名和密码。

        用户名是默认的,就是“user”,密码是我们启动时,控制台给我们打印的那一行日志。我们登陆后就可以拿到我们服务的响应了。

        从这个例子中,我们可以看到,在我们不做任何的配置时,Spring Security它把我们所有的访问都给我们保护起来了。这种默认的行为并不能满足我们实际开发的需要,那么我们该如何自定义并覆盖它这种配置?、

第一个表单登录例子

        我们用Spring Security来实现通过表单来登录,并且所有请求都需要授权才能访问的例子。

       首先创建一个继承继承WebSecurityConfigurerAdapter的类,它是Spring Security提供的web安全的适配器类,然后重写configure(HttpSecurity http)方法。

@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // http.httpBasic()  这是之前httpBasic的登录
        // 表单登录(认证)
        http.formLogin()
                .and()
                // 下面的都是对请求进行授权配置
                .authorizeRequests()
                // 是指任何请求
                .anyRequest()
                // 都需要授权
                .authenticated();
    }
}

        这时我们访问之前的服务,会跳到一个表单登录页面:

        用户名还是“user”,密码依然是控制台打印的默认密码。

Spring Security的基本原理

        Spring Security最核心的东西是一个过滤器链,这些过滤器在Spring boot启动的时候会帮我们配置上。

下面是2个常见的认证过滤器:

  • UsernamePasswordAuthenticationFilter:处理表单的认证方式。它会检查你的请求是不是一个登录请求,带不带用户名和密码。如果带,就会尝试认证处理。如果没带,则会把请求给下一个过滤器,让他来处理。

  • BasicAuthenticationFilter:处理Http Basic的认证方式。它会在在HTTP请求头部看到有没有basic的信息。如果有就拿出来并且做Base64解码,取出用户名和密码尝试登录。

        其他过滤器认证处理同理,如果有一个请求认证成功了,他就对请求标记。过滤器链最后一环是FilterSecurityInterceptor,这个过滤器会读取我们的配置,来校验请求有没有权限访问最终的服务。如果不能访问,他会根据其原因来抛出不同的异常,这些异常会被它前面的过滤器ExceptionTranslationFilter捕获到,并且做出相应的处理。比如前面配置了表单登录,它就引导用户去表单登录。

        这就是Spring Security最基本的原理,Spring Security的功能都是建立在这个过滤器链基础上的。需要注意的是,认证的过滤器我们是可以通过配置来控制是否生效的,而其他的过滤器不行。

查看

全网最详解Spring Security登录原理(带你看源代码) 根据上图所示配置了所有的请求都需要身份认证,那么,此拦截器就会检测当前请求是否经过了绿色过滤器的认证,即检查标记,实际上,这一段配置可以写的非常复杂,比如可以配置某类请求只有VIP用户才允许访问等,这些配置都会被拦截器读取,拦截器会根据这些配置做判断。如果判断通过,那么访问到具体API,如果不过,根据不过的原因,会抛出不同的异常。 比如在当前配置中,配置了所有请求都需要身份认证,那么,如果当前请求没有认证,拦截器就会抛出一个用户没有经过身份认证异常。如果配置文件中配置了当前请求只有VIP用户才能访问,而.. 阅读详情

相关推荐

spring security 4 filter UsernamePasswordAuthenticationFilter(一)

spring security 就是由一系列filter组成的一个安全认证框架,熟悉其中一些重要的filter是对熟悉spring security本身就是一种方式。首先我将先附上spring security官网上几个默认的filter 然后我会重点讲几个,今天我们先说UsernamePasswordAuthenticationFilter这个过滤器,从官网上的截图可以看到左边...

it帝国的博客-辉 1188

SpringSecurity 微服务权限方案

1.什么是微服务 1.1微服务由来: 微服务最早由 Martin Fowler 与 James Lewis 于 2014 年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。 1.2微服务优势: (1)微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来

qq_45834459的博客 4523

spring security详解

1.概要 Spring是非常流行和成功的Java应用开发框架,SpringSecurity正是Spring家族中的成员。SpringSecurity基于Spring框架,提供了一套Web应用安全性的完整解决方案。正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控制),一般来说,Web应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分,这两点也是SpringSecurity重要核心功能。 (1)用户认证指的是:验证某个用户是否为系统

wumingdu1234的博客 7760

security 底层原理_spring-security原理学习

spring security使用分类:如何使用spring security,相信百度过的都知道,总共有四种用法,从简到深为:1、不用数据库,全部数据写在配置文件,这个也是官方文档里面的demo;2、使用数据库,根据spring security默认实现代码设计数据库,也就是说数据库已经固定了,这种方法不灵活,而且那个数据库设计得很简陋,实用性差;3、spring security和Acegi不...

weixin_35531655的博客 479

Spring Security认证授权流程

在以上代码的for循环中,第一次拿到的 provider 是一个 Anonymous Authentication Provider。Spring Security会监听这个事件,接收到这个Authentication对象,进而调用 SecurityContextHolder.getContext().setAuthentication(...)方法,将 Authentication Manager返回的 Authentication对象,存储在当前的 Security Context 对象中。

2303_78503642的博客 3913

Spring Security学习——基于Java注解的Spring Security配置

基于Java注解的Spring Security配置           Spring在早期版本的时候,全是基于xml配置文件,导致配置极其繁杂。后期的版本中,Spring提供了对基于Java注解的支持。Java注解的Spring使每个Bean类有了自配置的特性,通过在每个类中添加相应的Java注解,就可以标注这些类在系统中的功能,可以大大减少配置文件的管理。当然,Java注解的Spring也

Benson的博客 1402

SpringSecurity原理分析

距离上次更新已经5个月了,因为这段时间主要是面试准备+适应新公司的内容,8月份离职,9月份入职,虽然看了很多内容,但没有进行系统整理。之后应该也会渐渐的整理一些内容,会继续更新,虽然没什么人看,但还是说明下,_O(∩_∩)O哈哈~。 ​ 这一篇我们主要梳理下SpringSecurity的原理,SpringSecurity主要是用于认证、授权的,其的主要原理就是通过Filter来处理。 一、SpringSecurity的基本原理 1、基本流程 ​ SpringSecurity的基本原理就是应用了Tomcat容

Feverasa的博客 7589

使用 Spring Security 通过 API Key 保护 Spring AI MCP 服务

本文介绍了如何使用Spring Security通过API Key保护Spring AI MCP服务。MCP(Model Context Protocol)作为AI应用开发的重要基础设施,若未加防护易被滥用。文章从构建基础MCP Server开始,逐步演示如何集成mcp-server-security模块,通过自定义Header携带API Key实现认证与鉴权。重点讲解了API Key的配置方式、校验规则以及Spring Security的集成方法,为MCP服务提供轻量级的安全防护方案。最后还提供了使用MC

简简单单Onlinezuozuo 1667

Spring Security 详解

​ Spring Security 是 Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。​ 一般Web应用的需要进行认证和授权。​ 而认证和授权也是SpringSecurity作为安全框架的核心功能。视频地址:​ 我们先要搭建一个简单的SpringBoot工程① 设置父工

qq_22075913的博客 12万+

在 webflux 环境中使用 Spring Security

复制日志中出现的名称:,在 idea 中按两下 shift在类中可以看到如下代码:可以看到密码的来源于 User 对象,而 User 对象,由方法传入,但值最终都是取自对象。而就是一个读取配置文件的类,定义如下:spring:security:user:复制代码再次启动项目,就可以使用cxyxj在 mvc 中还自定义过登录成功响应、登录失败响应、登录无权限访问响应、未登录访问认证资源响应、登出成功响应。那在 webflux 中如何自定义呢?

2301_76607156的博客 2768

spring security原理和机制 | Spring Boot 35

一、SpringSecurity 框架简介 Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的 成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方 案。 正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控 制),一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权 (Authorization)两个部分,这两点也是 Spring

学Java,找哪吒 5万+

Spring Security团队正式宣布Spring Security OAuth终止维护

Spring Security团队正式宣布Spring Security OAuth终止维护。spring 官宣终止维护spring security oauth目前官网的主页已经高亮提醒大家彻底停止维护。官网已经通知EOL旧的Spring Security OAuth项目终止到2.5.2.RELEASE版本,该项目将不会再进行任何的迭代,包括Bug修复,之前胖哥已经提醒该项目即将停止维护,有心的同学已经进行了迁移。2020年就已经宣布了EOL时间表项目文档和代码仓库被移除目前该项目的官方文档已经正式从sp

资料免费分享,点击名片 1585

OpenMontage:AI代理驱动的端到端视频生产系统实战指南

在当今内容创作领域,自动化视频生成技术正成为提升生产效率的关键。其核心原理在于通过智能体(Agent)架构,将复杂的视频制作流程拆解为可被AI理解和执行的标准化任务,从而实现从创意到成片的端到端自动化。这项技术的核心价值在于大幅降低了专业视频制作的门槛,使非专业用户也能快速产出具有一定专业度的内容。其典型应用场景包括社交媒体短片、产品演示、知识科普视频的批量生产。OpenMontage正是这一技术理念的杰出实践,它构建了一个完整的代理驱动视频生产系统,将AI编码助手转变为能自主规划并执行脚本撰写、素材检索、

weixin_35757191的博客 646

Spring Security 之 SecurityContext

前言   本文主要整理一下SecurityContext的存储方式。 SecurityContext接口 顾名思义,安全上下文。即存储认证授权的相关信息,实际上就是存储"当前用户"账号信息和相关权限。这个接口只有两个方法,Authentication对象的getter、setter。 package org.springframework.security.core.context; import java.io.Serializable; import org.springframewor

w110114的博客 2608

【3DSlicer】基于心脏ct影像重建3d模型及导出

软件:3DSlicer4.11 基于心脏ct影像重建3d模型

Liuees的博客 1万+

七步设计高频变压器

七步设计高频变压器

m0_71394959的博客 5400

Spring Security入门(十五)-Spring Security基本原理

一.Spring Security简介 使用Spring Security开发基于表单的认证 前面我们介绍的如何开发RESTful服务 但是这些服务是处于无保护状态 任何人知道地址都可以直接访问 企业级开发中肯定不准许存在的 需要对用户进行认证和授权保证合法用户访问 Spring Security核心功能 认证 (你是谁) 授权 (你能干什么) 攻击防护 (防止伪造身份) 内容简介 ...

上千主上-贝库塔 621

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

weixin_45011386的博客 3823

一篇就会的Spring Security开发

修改 application.yml 文件spring:security:user:name: test # 通过配置文件,设置静态用户名password: test # 配置文件,设置静态登录密码。

cgblpx的博客 1379

【从零开始学Skynet】基础篇(一):Skynet环境搭建

Skynet运行于Linux操作系统,我们可以在自己的电脑上搭建虚拟机系统,也可以购买阿里云、腾讯云服务器,笔者这个系列的所有代码都是在Ubuntu16.04版本的虚拟机系统下运行编辑。

我是一条寻水的鱼 3167

【QT开发教程】使用Qt进行蓝牙低功耗(BLE)编程

蓝牙低功耗(BLE,Bluetooth Low Energy)技术广泛应用于现代设备中,例如智能手表、健身追踪器和物联网设备。Qt提供了一套完整的Bluetooth模块,使开发者可以轻松地在应用程序中实现BLE通信功能。本文将介绍如何在Qt中进行BLE编程,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 2868

Spring Boot 引入 Spring Security

关于 spring security 官网链接, 本次示例使用的版本为5.6.3:https://docs.spring.io/spring-security/reference/index.html spring boot 项目中引入 spring security, maven坐标如下: <dependency> <groupId>org.springframework.boot</groupId> <a.

qq_43011496的博客 2093

【知识点讲解】大模型参数量与计算量(FLOPs)估算方法

指标参数量 (Params)计算量 (FLOPs)含义模型的大小,静态模型的计算复杂度,动态决定因素模型结构(宽度、深度)模型结构 +输入数据(B, S)影响内存占用、磁盘空间运行速度、能耗单位M (百万), B (十亿)工具thopptflopstorchinfothopptflopsfvcore重要提示FLOPs ≠ 速度:FLOPs 是理论计算量。实际速度还受内存带宽 (Memory Bandwidth)并行度硬件架构等因素严重影响。

AI浩 2095

Spring security

创建exception包,在exception包下创建自定义类,继承类认证失败的。

2201_75600005的博客 1734

QGraphicsView通过鼠标操作来绘制图元

在Visio和MindManager等类似的图元操作软件中,很多时候我们会通过鼠标操作来添加自定义的图元。这里就介绍一下如何在QT的图形视图框架中通过鼠标绘制来添加图元。

yang1fei2的博客 3575

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: Spring boot的文件上传
下一篇: 自定义Spring Security的用户认证逻辑
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值