Spring Security Web安全性解决方案

Day46_Spring Security—Spring Security的Web使用 1.改pom。 阅读详情

1. 简介

Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。
Spring Security 是通过加入自定义过滤器的方式,对访问请求进行认证和鉴权,核心过滤器就是认证过滤器和鉴权过滤器。

用户认证(Authentication)

一般为用户名和密码认证,又称登录验证

用户授权(Authorization)

每个用户对网站的操作权限不同,即分配用户权限

核心

UsernamePasswordAuthenticationFilter 登录认证
(RememberMeAuthenticationFilter,BasicAuthenticationFilter,AnonymousAuthenticationFilter) 其余的认证过滤器
ExceptionTranslationFilter 异常处理
FilterSecurityInterceptor 鉴权拦截处理

2. 认证过程

在这里插入图片描述

2.1 认证过程解析

2.1.1 Authentication(用来传递用户信息:用户名 + 密码 + 权限列表等)

2.1.2 UsernamePasswordAuthenticationFilter(账号密码认证过滤器,验证方式由AuthenticationManager 提供)

2.1.3 AuthenticationManager(认证管理器,是发起认证的出发点。提供一个默认实现ProviderManager)

2.1.3.1 ProviderManager(认证提供者管理器,该类中维护了一个认证提供者列表,只要这个列表中的任何一个认证提供者提供的认证方式认证通过,认证就结束。)
2.1.3.1.1 AuthenticationProvider(认证提供者,具体如何认证就看如何实现这个接口。SpringSecurity提供了DaoAuthenticationProvider实现,是使用数据库中数据进行验证)
2.1.3.1.1.1 UserDetailsService(根据用户名获取用户详细信息)

2.1.3.1.1.1.1 UserDetails(用户详细信息)

2.1.4 SecurityContextHolder(SecurityContextHolder 是最基本的对象,它负责存储当前 SecurityContext 信息。SecurityContextHolder默认使用 ThreadLocal 来存储认证信息,意味着这是一种与线程绑定的策略。在Web场景下的使用Spring Security,在用户登录时自动绑定认证信息到当前线程,在用户退出时,自动清除当前线程的认证信息。)

2.1.4.1 SecurityContext(SecurityContext 负责存储认证通过的用户信息(Authentication对象),保存着当前用户是什么,是否已经通过认证,拥有哪些权限等等。)

3. 鉴权过程

在这里插入图片描述

4. SpringSecurity 使用

  1. 引入依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <scope>compile</scope>
        </dependency>
  1. 重写配置(不重写配置也能使用,SpringSecurity中有许多的默认配置。重写配置是为了能符合我们自己的业务需求。需要重写三个configure方法)
    (1) 资源权限配置(void configure(HttpSecurity http))
    主要功能:
    1. 配置被拦截的资源
    2. 拦截对应的角色权限(即拥有某个权限才能访问)
    3. 定义认证方式:HttpBasic 或 HttpForm
    4. 自定义登录界面,登录请求地址,错误处理方式
    5. 自定义SpringSecurity过滤器
/**
* 资源权限配置(过滤器链)
* 1、配置被拦截的资源
* 2、拦截对应的角色权限(即拥有某个权限才可以访问)
* 3、定义认证方式:httpBasic或者httpForm
* 4、自定义登录界面、登录请求地址、错误处理方式等
* 5、自定义SpringSecurity过滤器
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
    //采用HttpBasic认证
    http.formLogin()
        //自定义登录界面
        .loginPage("/login/toLogin")
        //用户名的参数名
        .usernameParameter("username")
        //密码的参数名
        .passwordParameter("password")
        //登录请求的地址(默认是/login)
        .loginProcessingUrl("/login/doLogin")
        //登录成功后转发到(这里是post请求,因为是“转发”,不适重定向)
        .successForwardUrl("/test/hello")
        //登录失败
        .failureForwardUrl("/login/fail")
        .and()
        .authorizeRequests()
        //对于login请求直接放开
        .antMatchers("/login/toLogin").permitAll()
        //所有请求
        .anyRequest()
        //都需要认证
        .authenticated()
        .and().csrf().disable()
        ;
    }

2022 年 2 月 Spring 推荐使用 Bean 注解的方式来配置,如下:

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
        return http.build();
    }

(2)自定义身份认证(configure(AuthenticationManagerBuilder auth))

    /**
     * SpringSecurity 5.x之后密码必须编码否则会报空指针
     *
     * @return
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
      /**
     * 自定义身份认证
     * 该配置类的用于用户的认证
     * 1、提供身份信息(用户名、密码、角色、权限)
     * 2、配置认证信息的存储方式:内存、数据库
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //基于内存的存储方式
        auth.inMemoryAuthentication()
                .withUser("hardy")
                .password(passwordEncoder().encode("123456"))
                .roles("admin");
    }

2022 年 2 月 Spring 推荐以 Bean 的方式来配置,如下:


SpringSecurity的配置详解——websecurity Websecurity类主要的继承关系为自Websecurity->AbstractConfiguredSecurityBuilder->AbstractSecurityBuilder,其中上一步调用的build方法就在AbstractSecurityBuilder中 SpringSecurity在这个类中实现了创建FilterChain的方法——performbuild /*... 阅读详情

相关推荐

【Spring Security】WebSecurityConfigurerAdapter被deprecated怎么办?官方推荐新的Security配置风格总结

WebSecurityConfigurerAdapter被deprecated怎么办?这篇博文总结了官方推荐新的Security配置风格。

Sihang_Xie的博客 8328

SpringSecurity---web

1. SpringSecurity 特点: 和 Spring 无缝整合。 全面的权限控制。 专门为 Web 开发而设计。 旧版本不能脱离 Web 环境使用。 新版本对整个框架进行了分层抽取,分成了核心模块和 Web 模块。单独引入核心模块就可以脱离 Web 环境。 重量级 1.1Shiro特点 轻量级。Shiro 主张的理念是把复杂的事情变简单。针对对性能有更高要求的互联网应用有更好表现。 通用性。 好处:不局限于 Web 环境,可以脱离 Web 环境使用。 缺陷:在 Web 环境下一些特定的

tianynnb的博客 1146

spring security详解

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

wumingdu1234的博客 7763

web Security 入门篇

Hello Web Security在这个部分,我们对一个基于web的security作一些基本的配置。可以分成四个部分:更新依赖 – 我们已经在前一篇文章中用Maven进行了示范进行Spring Security配置 – 这个例子中,我们采用WebSecurityConfigurerAdapter确保Spring Security配置已经被加载了 – 我们采用AbstractAnnotation...

qq_40800349的博客 8839

【Spring Security系列】Spring Security 简介

Spring Security简介 官网:https://spring.io/projects/spring-security 中文文档:https://www.springcloud.cc/spring-security.html Spring Security 的前身是 Acegi Security,在被收纳为Spring子项目后正式更名为Spring Security。 在笔者成书时,Spring Security已经升级到5.1.3.RELEASE版...

qq_28248897的博客 1844

oracle ebs form 10g安装教程

这个窗口需要想想,你要安装的类型,不要盲目点击“下一步”,因为一旦Oracle安装后,重新安装之前,需要卸载Oracle干净才能重新安装,有时还会出现错误。到了该窗口后,需要耐心等待安装,安装到一大半后,自动弹出一个窗口,让我们选择Oracle安装第2部分磁盘的路径,继续安装,然后坐等安装结束。自定义安装Oracle根目录,点击“下一步”按钮后,耐心等待几秒钟,工具自动加载产品列表,加载完后,自动跳转到“选择安装类型”窗口。注:等待几秒钟后,关闭dos窗口,不必惊慌,自动调转到安装界面。

XIELIUHAI001的博客 473

spring security源码分析之web包分析

Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提...

229

AutoDock Vina多配体对接 (Simultaneous Multiple Ligand Docking)

多配体分子对接(Simultaneous Multiple Ligand Docking, SMLD)或(Multiple Ligand Simultaneous Docking, MLSD)是一种分子对接技术,用于将多个配体(小分子药物候选物)同时对接到一个蛋白质分子的结合位点。与传统的分子对接技术不同,传统方法通常只考虑一个配体与一个蛋白质的相互作用。SMLD的目标是更高效地研究多个配体如何与同一个蛋白质相互作用,以寻找潜在的药物候选物。

MurphyStar的博客 7146

Spring实战17——Spring Security

Spring Security 是一种基于Spring AOP 和Servlet 规范中的Filter 实现的安全框架 Spring Security 充分利用了依赖注入DI 和面向切面技术 Spring Securty 使用Servlet 规范中的Filter 保护web 请求并限制url 级别的访问。它还使用了Spring AOP 保护方法的调用——借助于对象代理和使用通知。 引入core...

?_#的博客 347

STDP实战:用PyTorch从零搭建脉冲神经网络(附完整代码)

本文提供了基于PyTorch从零搭建脉冲神经网络的实战教程,重点讲解了STDP学习规则的原理与工程实现。通过构建LIF神经元模型和向量化STDP层,并结合泊松编码,详细演示了如何构建一个能够进行无监督特征学习的混合网络架构,为探索神经形态计算和低功耗实时学习方案提供了完整代码与实践指南。

weixin_29056145的博客 266

2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛A题 农业灌溉系统优化

该摘要探讨了农业灌溉系统优化面临的复杂挑战,涉及智能灌溉技术的应用与资源配置问题。研究聚焦于一个1公顷的方形农场案例,该农场种植三种作物并面临动态环境条件(土壤类型、气象变化)。系统优化需平衡河流引水(非线性成本函数:C=50L^1.2+0.1Q^1.5)与储水罐灌溉(成本5元/升容积)两种方案,同时满足喷灌技术约束(喷头间距≥15米,覆盖半径15米)。关键矛盾体现在"平河旱储"的水资源调配策略与多作物需水量差异之间的协调,需通过传感器数据实时调整灌溉方案以实现效率最大化。(149字)

m0_60472361的博客 642

Spring Security基础

1. 前言 Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。 2. 新建工程 即引入以下依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

书山有路勤为径,学海无涯苦作舟 150

QGIS实用功能:加载天地图与下载指定区域遥感影像

本文聚焦 QGIS 软件实用功能,详细介绍在 QGIS 中加载天地图及其他常用底图(如 Google Maps、Bing Maps)的完整流程,涵盖天地图插件安装、密钥获取与配置、插件拓展使用等操作。同时,以 上海市瑞金二路街道为例,分步讲解下载指定区域遥感影像的方法,包括图层选择、坐标系设置、分辨率调整等关键参数配置。此外,还介绍了影像精准裁剪技巧,为 GIS 数据获取与处理提供实用指导,助力用户高效使用 QGIS 开展地理信息相关工作。

weixin_43679228的博客 7440

深入解析Spring Boot与Spring Security的集成实践

Spring Security是一个功能强大且高度可定制的安全框架,主要用于Java应用程序的身份验证和授权。它支持多种认证方式,如表单登录、OAuth2、JWT等,并提供了细粒度的权限控制。如果需要自定义用户认证逻辑,可以实现@Service@Override// 自定义逻辑,例如从数据库加载用户信息本文通过实际代码示例,详细介绍了Spring Boot与Spring Security的集成方法,包括基本配置、自定义认证逻辑和权限控制。

intwei的博客 393

uniapp [全端兼容] - 实现连接蓝牙电子秤+监听数据转换并实时返回示例代码,uniApp实现BLE蓝牙连接多个电子秤设备、蓝牙通讯协议对接详细教程(全平台兼容H5、微信小程序、苹果安卓App)

uniapp连接蓝牙电子秤,uniapp如何连接电子秤蓝牙,蓝牙称重,实现监听数据转换并实时返回,多蓝牙,uni-app电子秤16进制蓝牙通讯协议对接,uniapp微信小程序蓝牙获取电子秤的值,uniapp蓝牙称重电子秤,蓝牙电子秤硬件,APP端连接蓝牙秤获取重量实时显示在页面上蓝牙秤,插件组件,蓝牙连接失败,uniapp安卓苹果ios连接蓝牙电子秤没反应,uniapp微信小程序 蓝牙低功耗连接发送数据监听接收,uni-app小程序蓝牙连接、读写数据全过程,uniapp连接蓝牙体脂秤,蓝牙搜索不到怎么办,如

🏆 前端领域优质创作者 1万+

7.3 空间矢量调制(SVM)整数算法

本文提出了一种基于整数运算的空间矢量调制(SVM)优化实现方案,适用于计算资源有限的Cortex-M0平台。针对传统SVM算法中复杂的三角函数和浮点运算问题,重点优化了扇区判断和占空比计算两个关键环节。在扇区判断方面,采用基于电压分量符号和相对大小的三变量法,避免了角度计算;在占空比计算方面,通过几何关系将作用时间表示为电压分量的线性组合,并采用定点数实现。方案还详细讨论了系数定点化、死区补偿等实现细节,在保证精度的同时显著降低了计算复杂度。实验结果表明,优化后的整数算法在M0平台上仅需50-80个周期即可

技术工作者 944

Spring Security (1)-配置篇

原文链接:http://www.jylt.cc/#/detail?id=dbfcb0d72b016dc3e52fcab29a101845 框架简介 spring security 是一款基于Spring 框架的框架,提供了一套web应用安全性的完整解决方案。 web应用的安全性一般分为:用户认证和用户授权两部分。 用户认证就是用来区分当前访问的用户、设备等身份。比如我们常用的登录操作就属于用户认证,登录之后系统便知道我们是谁。 用户授权就是辨识当前用户拥有的角色、权限。比如用户是不是管理员角色,如果是

晨曦 391

ContextCapture系列教程(三):大疆精灵4RTK版无人机POS数据提取、处理(处理后勉强达到免相控要求)

大疆精灵 Phantom 4 RTK于2018年发布,是大疆为高精度建图与精准飞行设计的行业级无人机,在精灵4无人机外形的基础上,机身增加了RTK模块,可以实现高精度 RTK 定位导航,相机与 RTK 系统采用微秒级时间同步,可以通过app 进行航线规划飞行

pausau的博客 1万+

Spring Security 认证

Spring Security 是一个强大的安全框架,它为 Java 应用提供了全面的安全保障。它具有全面的安全功能、易于集成、高度可定制、强大的认证和授权机制以及防止攻击等特点。在项目中使用 Spring Security 可以提高应用的安全性,保护用户数据和应用资源。无论是 Web 应用、企业级应用还是微服务架构,Spring Security 都是一个值得考虑的安全解决方案。在博客中加入使用 Spring Security 的实际案例分享一些 Spring Security 最佳实践。

SOS5418818845的博客 1061

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Mybatis简单复习2
下一篇: SpringData 操作 Redis
DDDerek~
博客等级 码龄7年 150粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值