当前位置: 首页 > article >正文

Spring Security(maven项目) 3.0.2.9版本

前言:

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。

温故知新:

由于没办法实时体验Spring Security的运用,单纯靠文字和代码很难去真正的理解Spring Security,所以作者决定再一次修改路线

先从Spring Security 配置开始,因为它前面的内容是在说,这些配置有什么用,但就是不告诉你怎么配

正片:

第一步:创建一个类(名字随便起,只要你看得懂)

第二步:添加两个注解

第三步:将剩下内容复制,并添加引用

全代码如下

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration      //是spring boot的配置类注解,专门处理配置的
@EnableWebSecurity  //是Spring Security java配置必须要的注解
public class WebSecurityConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser
                (
                        User.withDefaultPasswordEncoder()
                        .username("user")
                        .password("password")
                        .roles("USER")
                        .build());
        return manager;
    }
}
代码完成后,我们回来看官方介绍

第一步是创建我们的Spring Security Java配置。该配置创建了一个被称为 springSecurityFilterChain 的 Servlet 过滤器,它负责应用程序中的所有安全问题(保护应用程序的URL,验证提交的用户名和密码,重定向到登录表单,等等)。下面的例子显示了Spring Security Java配置的最基本例子。

第一步是创建我们的Spring Security Java配置。

作者解读:

有第一步就会有第二步,第三步,直至完成。

该配置创建了一个被称为 springSecurityFilterChain 的 Servlet 过滤器,它负责应用程序中的所有安全问题(保护应用程序的URL,验证提交的用户名和密码,重定向到登录表单,等等)。

作者解读:

图片中最右边的内容,SecurityFilter

下面的例子显示了Spring Security Java配置的最基本例子。

作者解读:

最简单的配置

作者 总结:

这个是一个SpringSecurity基本配置

作者解读:

这个对这个配置实现功能的具体化——实际上只有一段是,当然可能这一段还是默认配置

@Configuration      //是spring boot的配置类注解,专门处理配置的
@EnableWebSecurity  //是Spring Security java配置必须要的注解
public class WebSecurityConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser
                (
                        User.withDefaultPasswordEncoder()
                        .username("user")
                        .password("password")
                        .roles("USER")
                        .build());
        return manager;
    }
}

InMemoryUserDetailsManager,它提供了对基于内存认证的支持

翻译过来就是基于表单的用户名/密码登录校验,在开篇,使用Security框架时,他自带了这么一个用户名/密码校验,也就是说,这段代码啥都没提供!

继续往下看,能不能与作者认知达成共识——这段代码啥都没提供!

abstractSecurityWebApplicationInitializer        抽象安全网络应用程序初始化器

下一步是在WAR文件中注册 springSecurityFilterChain

作者解读:第二步是在WAR文件中注册SpringSecurityFilterChain

有意思的是,官方在最开始涉及到的注册时,他告诉我们用什么注册,却不告诉我们怎么注册

这时,再来看这句话——它为Spring Security的所有Servlet支持提供了一个起点,配上注册

FilterChainProxy 提供 起点,怎么提供起点——注册

怎么注册?不告诉你,你看到配置你就知道了

你可以在Servlet 3.0以上的环境中通过 Spring的 WebApplicationInitializer 支持 在Java配置中完成。毫不奇怪,Spring Security提供了一个基类(AbstractSecurityWebApplicationInitializer)来确保 springSecurityFilterChain 为你注册。

作者解读:

它提供了一个基本类,让我们注册

我们使用 AbstractSecurityWebApplicationInitializer 的方式有所不同,这取决于我们是否已经在使用Spring,或者Spring Security是否是我们应用中唯一的Spring组件。

作者解读:两种注册模式

使用了SpringMCV,和未使用Spring两种,很显然,在我们的环境框架中是涉及到spring,所以选第二个

在旧版本中,Security架构里是明显涉及了Spring的

java生态中除了spring还有其他框架,Spring Security的建立除了服务spirng还服务其他框架

所以提供了两种,我们是基于springboot的Maven,所以选第二个

第一段代码的作用:为你的应用程序中的每一个URL注册SpringSecurityFilterChain

第二段代码的作用:不仅为每一个URL注册SpringSecurityFilterChain,还将自定义配置进行添加

共同点:它们继承的都是同一个基本类

当你实现第二段代码时,会需要实现代码

实现

官方将[0]改为了{文件名},文件名为带有

@Configuration      //是spring boot的配置类注解,专门处理配置的
@EnableWebSecurity

这两个注解的类

我们能添加很多了Security配置吗?

Class【】{}是一个数组,数组不止有一个,所以我们可以添加多个Security配置

到这里,我们完成了Security的基本配置

总结:

java配置到运用分为两步

第一步:配置Security Filter

第二步:注册Security Filter Chain

在FilterChainProxy注册,继承AbstractAnnotationConfigDispatcherServletInitializer类


http://www.kler.cn/a/523355.html

相关文章:

  • mac安装dockerdesktop优化
  • Python3 【函数】:见证算法的优雅与力量
  • ubuntu 更新24LTS中断导致“系统出错且无法恢复,请联系系统管理员”
  • 在Ubuntu上用Llama Factory命令行微调Qwen2.5的简单过程
  • [内网安全] 内网渗透 - 学习手册
  • 戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法
  • 【Rust自学】16.2. 使用消息传递来跨线程传递数据
  • 苹果AI最新动态:Siri改造和AI模型优化成2025年首要任务
  • 记录 | 基于Docker Desktop的MaxKB安装
  • 从 Web3 游戏融资热看行业未来发展趋势
  • C语言实现统计数组正负元素相关数据
  • Leecode刷题C语言之跳跃游戏②
  • 【信息系统项目管理师-选择真题】2008上半年综合知识答案和详解
  • 数据分析系列--③RapidMiner算子说明及数据预处理
  • C++:PTA L2-003 月饼
  • 新时代架构SpringBoot+Vue的理解(含axios/ajax)
  • 知识体系、知识管理角度的赚钱思考
  • NeetCode刷题第17天(2025.1.27)
  • 使用 Julia Distributions.jl 进行概率分布处理
  • [论文阅读] (37)CCS21 DeepAID:基于深度学习的异常检测(解释)
  • 论文阅读(十五):DNA甲基化水平分析的潜变量模型
  • 项目集成Nacos
  • 关于bash内建echo输出多行文本
  • DeepSeek理解概率的能力
  • Python算法详解:贪心算法
  • Elasticsearch——Elasticsearch性能优化实战