Spring Security Config : 注解 EnableWebSecurity 启用Web安全

【Spring Security注解详解】 Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架,广泛用于Java应用程序中以确保安全。它提供了多种注解来简化安全控制的实现,特别是在方法级别的权限控制上。 阅读详情

@EnableWebSecurity是Spring Security用于启用Web安全的注解。典型的用法是该注解用在某个Web安全配置类上(实现了接口WebSecurityConfigurer或者继承自WebSecurityConfigurerAdapter)。典型的使用例子如下 :

 @Configuration
 @EnableWebSecurity
 public class MyWebSecurityConfiguration extends WebSecurityConfigurerAdapter {

        @Override
        public void configure(WebSecurity web) throws Exception {
                web.ignoring()
                // Spring Security should completely ignore URLs starting with /resources/
                                .antMatchers("/resources/**");
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
                http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest()
                                .hasRole("USER").and()
                                // Possibly more configuration ...
                                .formLogin() // enable form based log in
                                // set permitAll for all URLs associated with Form Login
                                .permitAll();
        }

        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
                auth
                // enable in memory based authentication with a user named "user" and "admin"
                .inMemoryAuthentication().withUser("user").password("password").roles("USER")
                                .and().withUser("admin").password("password").roles("USER", "ADMIN");
        }

        // Possibly more overridden methods ...
 }

该注解其实起到了如下效果 :

  1. 控制Spring Security是否使用调试模式(通过注解属性debug指定),缺省为false,表示缺省不使用调试模式;
  2. 导入 WebSecurityConfiguration,用于配置Web安全过滤器FilterChainProxy;
    • 若干个WebSecurityConfigurerAdapter作用于一个WebSecurity生成一个最终使用的web安全过滤器FilterChainProxy
  3. 如果是Servlet 环境,导入WebMvcSecurityConfiguration;
  4. 如果是OAuth2环境,导入OAuth2ClientConfiguration;
  5. 使用注解@EnableGlobalAuthentication启用全局认证机制;

    Spring Security依赖于全局认证机制,所以这里启用全局认证机制是很自然的事。
    注解@EnableGlobalAuthentication又导入了AuthenticationConfiguration用于全局认证机制配置;
    AuthenticationConfiguration主要目的用于配置认证管理器组件AuthenticationManager。
    AuthenticationManager会在运行时用于认证请求者身份。

在非Springboot的Spring Web MVC应用中,该注解@EnableWebSecurity需要开发人员自己引入以启用Web安全。而在基于Springboot的Spring Web MVC应用中,开发人员没有必要再次引用该注解,Springboot的自动配置机制WebSecurityEnablerConfiguration已经引入了该注解,如下所示:


package org.springframework.boot.autoconfigure.security.servlet;

// 省略 imports 行
@Configuration
// 仅在存在 WebSecurityConfigurerAdapter bean 时该注解才有可能生效
// (最终生效与否要结合其他条件综合考虑)
@ConditionalOnBean(WebSecurityConfigurerAdapter.class)
// 仅在不存在 springSecurityFilterChain 时该注解才有可能生效
// (最终生效与否要结合其他条件综合考虑)
@ConditionalOnMissingBean(name = BeanIds.SPRING_SECURITY_FILTER_CHAIN)
// 仅在 Servlet 环境下该注解才有可能生效
// (最终生效与否要结合其他条件综合考虑)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@EnableWebSecurity // <====== 这里启用了 Web 安全
public class WebSecurityEnablerConfiguration {

}

WebSecurityEnablerConfiguration对注解@EnableWebSecurity的使用并没有遵循上面所举的典型用法的例子。实际上,一个Spring Web应用中,WebSecurityConfigurerAdapter可能有多个 , @EnableWebSecurity可以不用在任何一个WebSecurityConfigurerAdapter上,可以用在每个WebSecurityConfigurerAdapter上,也可以只用在某一个WebSecurityConfigurerAdapter上。多处使用@EnableWebSecurity注解并不会导致问题,其最终运行时效果跟使用@EnableWebSecurity一次效果是一样的。

源代码

源代码版本 Spring Security Config 5.1.4.RELEASE

package org.springframework.security.config.annotation.web.configuration;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.security.config.annotation.authentication.configuration.EnableGlobalAuthentication;
import org.springframework.security.config.annotation.web.WebSecurityConfigurer;

/**
 *
 * @see WebSecurityConfigurer
 * @see WebSecurityConfigurerAdapter
 *
 * @author Rob Winch
 * @since 3.2
 */
@Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value = { java.lang.annotation.ElementType.TYPE })
@Documented
// 导入 WebSecurityConfiguration Web安全配置,Spring Web Mvc 有关安全的配置,OAuth2 有关安全的配置
@Import({ WebSecurityConfiguration.class,
		SpringWebMvcImportSelector.class,
		OAuth2ImportSelector.class })
// 启用全局安全认证机制		
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity {

	/**
	 * Controls debugging support for Spring Security. Default is false.
	 * @return if true, enables debug support with Spring Security
	 */
	boolean debug() default false;
}

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

相关推荐

springboot整合springSecurity

攻击防范(Attack Protection):Spring Security提供了一系列的攻击防范机制,包括跨站点脚本攻击(XSS)、跨站请求伪造(CSRF)、点击劫持(Clickjacking)等。上面的意思是,“lllllc”这个用户(正常需要连接jdbc,在数据库中获取),可以访问vip1和vip3页面,需要设置密码加密,否则页面会错。重写configure方法,这个方法是会涉及到重载,有很多方法名相同的,我们需要重写参数为http的方法。这个的意思是请求的url,我们没有填,所以是主页。

m0_65111173的博客 564

@EnableWebSecurity的作用

@EnableWebSecurity的作用 首先,EnableWebSecurity注解是个组合注解,他的注解中,又使用了@EnableGlobalAuthentication注解: 在这里插入代码片

weixin_42849689的博客 4万+

OpenClaw智能体应用第一集--飞书多智能体配置

本文介绍了智能体(Agent)的核心概念与配置实践。Agent作为独立作用域的"大脑",包含模型(认知引擎)、记忆系统(短期/长期记忆)、人设(角色定义)、工具(外部能力调用)、规划执行(任务拆解)、运行环境等核心要素。每个Agent拥有唯一agentId标识,通过accountId区分渠道账号,Binding机制实现消息路由。实践部分展示了通过命令行配置多个智能体(如writer)的过程,包括插件注册和工具加载。系统支持多Agent架构,可根据不同场景需求灵活配置专属智能体。

weixin_44626085的博客 1745

什么时候需要用到 @EnableWebSecurity 注解?

有小伙伴在学习 Spring Security 的遇到一个问题:箭头所指的位置报红,也就是 Spring 容器中没有找到一个类型为 HttpSecurity 的 Bean。小伙伴说如果他在配置类上加 @EnableWebSecurity 注解,就不报错;不加该注解则会报错。那么到底该不该加 @EnableWebSecurity 注解呢?今天就来和大伙聊一聊这个话题。

江南一点雨的专栏 2235

滑模控制理论(SMC)概述

滑模控制理论(SMC)概述一、背景二、数学理论三、高维拓展四、分析 一、背景 滑模控制理论(Sliding Mode Control, SMC)是一种建立在现代控制理论基础上的控制理论,主要数学核心为李雅普诺夫函数。 滑模控制的核心思想是建立一个滑模面,将被控系统拉取到滑模面上来,使系统沿着滑模面运动。滑模控制的一个优势是无视外部扰动和不确定参数,采用一种比较“暴力”的方式达到控制的目的。 其思想和反步法有些类似,但数学实现起来更加方便而不抽象。相比反步法,滑模控制没有复杂的数学计算,也不会出现“微分爆炸”

高能阿博特的博客 6万+

STM32 WinUSB免驱实现:从DFU模式到高速通信的实战指南

本文详细介绍了STM32 WinUSB免驱实现方案,从DFU模式到高速通信的完整实战指南。通过修改设备描述符、添加BOS描述符和实现WCID描述符集,开发者可以轻松实现即插即用的USB设备,无需额外安装驱动。文章还提供了性能优化技巧和实际应用案例,帮助开发者快速部署高效稳定的USB通信方案。

weixin_29171087的博客 416

SpringSecurity OAuth2.0-第3章: spring mvc集成spring security

一 spring security spring security是一个封装比较完整安全的认证授权框架。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,在spring boot项目中加入spring security更是十分简单,使用Spring Security 减少了为企业系统安全控制编写大量重复代码的工作。 ...

健康平安的活着的专栏 4168

UE5 SplineMesh与StaticMesh性能对比:生成1000米路径的帧率与内存实测

本文深度对比了UE5中SplineMesh与StaticMesh在生成1000米路径时的性能差异,包括帧率、内存占用及实现复杂度。实测数据显示,SplineMesh在Draw Call优化和动态变形场景中表现更优,而StaticMesh适合需要复杂材质变化的场景。文章还提供了优化技巧和选型指南,帮助开发者根据项目需求做出科学决策。

weixin_33976326的博客 315

Spring Security Config : WebSecurityConfiguration Web 安全配置

package org.springframework.security.config.annotation.web.configuration; // 忽略 import 行 /** * Spring Security 的配置类 : * 1. 使用一个 WebSecurity 对象创建执行 Spring Security 基于web的安全任务的 FilterChainProxy 对象。...

Details Inside Spring 5249

【LAMMPS学习】五、LAMMPS命令(8) Pair_style 势

所有LAMMPS pair_style命令如下表所示。有些样式有加速版本。这由括号中的附加字母表示:g = GPU, i = INTEL, k = KOKKOS, o = OPENMP, t = OPT。

荷塘阅色 3014

在 MATLAB/Simulink 中构建一个固定地面站天线指向控制系统的完整仿真模型

在卫星通信系统中,地面站天线负责与在轨卫星建立高增益、高稳定性的通信链路。对于固定地面站(如卫星测控站、深空站、VSAT主站),天线必须具备高精度指向能力,以确保波束始终对准卫星。然而,卫星(尤其是低轨卫星)在天空中快速移动,地面站天线必须实时跟踪其轨迹。此外,环境扰动(风载、热变形、机械误差)也会导致指向偏差。因此,设计一个高精度、高鲁棒性的天线指向控制系统(Antenna Pointing Control System)至关重要。本文将手把手教你如何在中构建一个固定地面站天线指向控制系统。

amy_mhd的博客 130

Spring Security集成JWT与国密SM4构建安全认证授权中心

在分布式系统和微服务架构中,用户认证与授权是保障应用安全的核心环节。传统的Session方案在服务拆分和前后端分离场景下面临维护复杂、扩展性差等挑战。JWT(JSON Web Token)作为一种无状态令牌机制,通过自包含的声明实现跨服务身份验证,有效解决了分布式环境下的认证难题。其技术价值在于简化了服务端状态管理,提升了系统的可扩展性和性能。结合Spring Security强大的权限控制能力,可以实现从URL到方法级别的细粒度授权。在实际应用场景中,为了满足特定行业的数据安全合规要求,引入国密SM4算法

weixin_30824599的博客 1231

MATLAB代码实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响

这段MATLAB代码主要实现了船舶航线优化的功能,使用混合遗传算法(结合模拟退火算法)来寻找从大连港到格拉斯通港的最优航线,同时考虑了船舶的参数、气象数据(风速、风向、有效波高、波浪阻力系数等)对航行的影响。通过以上步骤,该代码能够找到一条在考虑船舶性能和气象条件下,从大连港到格拉斯通港的较优航线,最小化燃油消耗和航行时间的加权和。

AI的内部世界的博客 512

Spring Security实现OAuth2协议及实战

OAuth2是目前最流行的授权协议,用来授权第三方应用,获取用户数据。举个例子:快递员想要进入小区,有3种方式。1是业主远程开门,2是业主告诉门禁密码,3是使用令牌(Oauth2)。如图:令牌和密码的区别:令牌相当于火车票,密码相当于是钥匙。令牌是短期的,自动失效。密码是长期有效。令牌是可以撤销的,撤销立即生效。密码一般不允许他们撤销。令牌有权限范围,如车票座位为10车A15座。密码一般是完整权限。第三方登录演示(网易云客户端利用QQ扫码登录)

qq_43372633的博客 3005

【多模态实验总结】整理了几十篇文章,理清 多模态目标检测 在写论文中需要做哪些实验

此篇文章中将多模态目标检测所做的实验,分成了各个类别,目的是为了对多模态的实验有一个清晰的理解。可以看到,很多表格中放的并不是做了单一的某一个对比,而是将提出的模型,在不同的骨干、数据集上的效果与基线进行对比,使内容更全面。因此这里提到的各种实验,大家在后续改进写论文过程中可以根据自己的论文内容进行整合。对于这里提到的这些文章,大家都可以看看,我只是按照我这里的分类截取了部分实验,这里提到的所有实验在每篇文章中也基本能看到相应的实验。

Limiiiing的博客 3135

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring Security- 环境搭建与第一个入门案例实现

本文介绍了Spring Security框架的基本概念和功能,并详细讲解了如何从零开始搭建开发环境。主要内容包括: Spring Security概述:一个功能强大的认证授权框架,提供身份验证、访问控制、Web安全防护等功能,采用过滤器链设计模式。 环境准备:需要JDK8+、构建工具(Maven/Gradle)和IDE,推荐使用Spring Boot 2.7.x版本。 依赖配置:提供了Maven和Gradle两种构建工具的详细依赖配置,包括Spring Boot Web、Security核心模块以及Thym

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spring Security入门实战:从零构建Java Web安全权限控制

在Java Web开发中,权限控制是保障应用安全的核心机制,它通过认证与授权两大流程,确保只有合法用户才能访问特定资源。其原理通常基于过滤器链或拦截器,对请求进行逐层校验,并结合安全上下文传递用户身份信息。这一技术的价值在于为应用提供可扩展、可维护的安全防护,有效抵御未授权访问、会话劫持等常见威胁。在实际应用场景中,从简单的登录拦截到复杂的角色权限管理,都需要一个成熟的框架来支撑。Spring Security作为企业级安全解决方案,通过其强大的过滤器链和灵活的配置,能够高效处理用户登录、角色权限控制、CS

weixin_30838873的博客 406

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Spring Security实战:从零构建企业级Java Web访问控制体系

在Web应用开发中,访问控制是保障系统安全的核心机制,其基础在于认证与授权两大概念。认证负责验证用户身份,确认“你是谁”,通常通过用户名密码、令牌等方式实现;授权则是在认证成功后,决定“你能做什么”,基于角色或权限进行资源访问控制。这套机制的技术价值在于为分布式协作、远程办公等场景提供了可靠的数据安全与权限管理基础,能有效防止越权访问和数据泄露。其典型应用场景包括企业内部管理系统、多租户SaaS平台以及需要严格区分用户角色的业务系统。本文以Spring Security框架为例,结合会话管理和密码编码等热词

weixin_30299709的博客 316

Spring Security 的 Java Config Preview(Java 配置预览)是 Spring Security 3.2 引入的重要特性

Spring Security 的 Java Config Preview(Java 配置预览)是 Spring Security 3.2 引入的重要特性,标志着从传统的 XML 配置向纯 Java 类配置(基于 `@Configuration` 和 `@EnableWebSecurity`)的全面过渡。它通过注解驱动的方式简化安全配置,提升类型安全性、IDE 支持和可测试性。

[Blog][Domain] programb.blog.youkuaiyun.com 537

Spring Security入门实战:从零构建Java Web应用安全防线

身份认证与访问控制是保障Web应用安全的核心机制,其原理在于验证用户身份并依据权限控制资源访问。在Java生态中,Spring Security作为主流安全框架,通过封装密码加密、会话管理和CSRF防护等复杂逻辑,显著提升了开发效率与系统安全性。该框架遵循“约定大于配置”理念,提供默认安全配置,同时支持深度定制,适用于从简单登录到OAuth 2.0集成等多种场景。本文聚焦于Spring Security的实战应用,通过配置SecurityFilterChain与实现自定义登录页面,演示如何快速为Spring

weixin_33843409的博客 384

Spring Security- 集成 Swagger 实现接口权限控制

本文介绍了如何在Spring Boot项目中集成Spring Security与Swagger(OpenAPI)实现基于角色的接口权限控制。主要内容包括: 技术选型:使用Spring Boot 3.x + Spring Security 6.x + springdoc-openapi进行整合 项目结构:采用标准分层架构,包含安全配置、控制器、服务层等模块 权限模型:设计基于RBAC的用户角色体系(USER/ADMIN/AUDIT) 核心实现: 用户实体与角色实体的JPA定义 自定义UserDetailsSe

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

航空乘客安全系统实战:从RBAC到审计日志的Spring Security落地

在后台管理系统开发中,权限控制与操作审计是保障数据安全的核心环节。基于角色的访问控制(RBAC)通过用户-角色-权限的链路实现灵活授权,而Spring Security作为Java生态主流的认证授权框架,提供了从接口拦截到方法级权限校验的完整能力。然而,仅掌握基础配置仍难以应对复杂业务场景,例如航空旅客安全系统中,还需结合数据权限过滤和审计追踪才能形成安全闭环。本文从RBAC模型设计入手,讲解Spring Security与AOP整合的完整过程,揭示数据权限与日志记录的关键实践,并针对常见权限失效问题给出排

weixin_30731305的博客 567

Spring Security 403错误排查:从权限决策到生产实践

在Web应用开发中,权限控制是保障系统安全的核心机制,其原理基于认证与授权流程。Spring Security作为Java领域主流的安全框架,通过过滤器链和访问决策管理器实现细粒度的权限管理。理解其工作原理对于解决常见的403 Forbidden错误至关重要,这类错误通常源于权限配置不当或安全上下文异常。在实际工程实践中,开发者需要掌握从用户认证、权限加载到路径匹配的完整链路,并结合RBAC模型设计健壮的权限体系。本文聚焦Spring Security的权限决策机制,通过典型场景复现,提供系统化的403问题

weixin_34072458的博客 479
上一篇: Spring Security Config : AbstractConfiguredSecurityBuilder
下一篇: Spring Security : 安全构建器HttpSecurity和WebSecurity的区别
安迪源文
安迪源文 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄19年 811粉丝 537原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值