首页 > 编程语言 >SpringSecurity源码之WebSecurity构建FilterChainProxy

SpringSecurity源码之WebSecurity构建FilterChainProxy

时间:2023-04-09 21:12:44浏览次数:45  
标签:EnableWebSecurity WebSecurity FilterChainProxy SpringSecurity 源码 WebSecurityConf

主要参考了https://mp.weixin.qq.com/s/D0weIKPto4lcuwl9DQpmvQ

SpringSecurity版本是2.7.9。将SpringBoot和SpringSecurity结合使用,SpringSecurity自动配置类是SecurityAutoConfiguration.class。

 

@AutoConfiguration
@ConditionalOnClass({DefaultAuthenticationEventPublisher.class})
@EnableConfigurationProperties({SecurityProperties.class})
@Import({SpringBootWebSecurityConfiguration.class, SecurityDataConfiguration.class})
public class SecurityAutoConfiguration {
    public SecurityAutoConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean({AuthenticationEventPublisher.class})
    public DefaultAuthenticationEventPublisher authenticationEventPublisher(ApplicationEventPublisher publisher) {
        return new DefaultAuthenticationEventPublisher(publisher);
    }
}

SecurityAutoConfiguration导入了SpringBootWebSecurityConfiguration配置类。
 

@Configuration(
    proxyBeanMethods = false
)
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
class SpringBootWebSecurityConfiguration {
    SpringBootWebSecurityConfiguration() {
    }

    @Configuration(
        proxyBeanMethods = false
    )
    @ConditionalOnMissingBean(
        name = {"springSecurityFilterChain"}
    )
    @ConditionalOnClass({EnableWebSecurity.class})
    @EnableWebSecurity
    static class WebSecurityEnablerConfiguration {
        WebSecurityEnablerConfiguration() {
        }
    }

    @Configuration(
        proxyBeanMethods = false
    )
    @ConditionalOnClass({WebInvocationPrivilegeEvaluator.class})
    @ConditionalOnBean({WebInvocationPrivilegeEvaluator.class})
    static class ErrorPageSecurityFilterConfiguration {
        ErrorPageSecurityFilterConfiguration() {
        }

        @Bean
        FilterRegistrationBean<ErrorPageSecurityFilter> errorPageSecurityFilter(ApplicationContext context) {
            FilterRegistrationBean<ErrorPageSecurityFilter> registration = new FilterRegistrationBean(new ErrorPageSecurityFilter(context), new ServletRegistrationBean[0]);
            registration.setDispatcherTypes(DispatcherType.ERROR, new DispatcherType[0]);
            return registration;
        }
    }

    @Configuration(
        proxyBeanMethods = false
    )
    @ConditionalOnDefaultWebSecurity
    static class SecurityFilterChainConfiguration {
        SecurityFilterChainConfiguration() {
        }

        @Bean
        @Order(2147483642)
        SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
            ((ExpressionUrlAuthorizationConfigurer.AuthorizedUrl)http.authorizeRequests().anyRequest()).authenticated();
            http.formLogin();
            http.httpBasic();
            return (SecurityFilterChain)http.build();
        }
    }
}

 

SecurityFilterChainConfiguration是默认的SecurityFilterChain配置类。WebSecurityEnablerConfiguration类上@EnableWebSecurity做了自动化配置Security的主要工作。

 

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({WebSecurityConfiguration.class, SpringWebMvcImportSelector.class, OAuth2ImportSelector.class, HttpSecurityConfiguration.class})
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity {
    boolean debug() default false;
}

@EnableWebSecurity注解导入了WebSecurityConfiguration配置类,同时引入了@EnableGlobalAuthentication注解。来看下WebSecurityConfiguration类。
 

WebSecurityConfiguration实现了ImportAware,BeanClassLoaderAware两个接口。BeanClassLoaderAware主要是为了获取ClassLoader。ImportAware的作用在松哥的博客说了。是为了获取到 @EnableWebSecurity 中的属性值,这里主要是 debug 属性。WebSecurityConfiguration主要看springSecurityFilterChain()和setFilterChainProxySecurityConfigurer(ObjectPostProcessor

标签:EnableWebSecurity,WebSecurity,FilterChainProxy,SpringSecurity,源码,WebSecurityConf
From: https://www.cnblogs.com/shigongp/p/17300802.html

相关文章

  • 爬虫最后一天,爬取到的数据存到mysql中,爬虫和下载中间件、加代理、cookie、header、se
    爬到的数据存到mysql中classFirstscrapyMySqlPipeline:defopen_spider(self,spider):print('我开了')self.conn=pymysql.connect(user='root',password="",host='127.0.0.1......
  • 【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandl
    ExceptionHandler的作用ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,以捕获不同级别的异常。在Spring中使用ExceptionHandler非......
  • kubegres 源码解析(四)
    CreateSpecCheckerSpecChecker结构体内有resourceStates字段,用于与Spec预设值进行比较.rc.SpecChecker=checker.CreateSpecChecker(rc.KubegresContext,rc.ResourcesStates)typeSpecCheckerstruct{kubegresContextctx.KubegresContextresourcesStat......
  • 【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandl
    ExceptionHandler的作用ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,以捕获不同级别的异常。在Spring中使用ExceptionHandle......
  • spring security自动配置的源码简单分析
    本文基于的springboot版本是2.1.3.RELEASE,用springboot来自动配置springsecurity,一、综述在springboot中使用springsecurity只需要引入如下依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId&......
  • 源码共读 | 为 vite 项目自动添加 eslint 和 prettier
    前言Vite是一个用于现代JavaScript应用程序的快速、轻量级的构建工具,其设计目的是易于使用和适用于大型项目。Vite-pretty-lint是一个插件,可以在基于Vite的项目中安装和配置,以便在编写代码时能够自动对代码进行格式化和检查代码。这可以帮助开发人员在开发过程的早期捕获格......
  • Spring 源码解析 --AOP
        ......
  • 带源码的FPGA IP开源网站
    转载自:https://mp.weixin.qq.com/s/mNBhf3_-1zRFwUgaQmWYEQ1、fpga4funhttps://www.fpga4fun.com/你能在这个网站上找到什么?您可以找到信息页面,以及使用FPGA板构建的FPGA项目。注重点:项目。2、OPENCOREShttps://opencores.org/Opencores是一个开源的数字电路设计......
  • vue2源码-一、rollup环境配置
    npminit-y创建初始化package.json并修改script为"dev":"rollup-cw"安装rollup及其插件:npminstallrolluprollup-plugin-babel@babel/core@babel/preset-env--save-dev创建rollup.config.js对rollup进行配置:配置如下:importbabelfrom'rollup-plugin-bab......
  • SpringCloud源码学习笔记3——Nacos服务注册源码分析
    系列文章目录和关于我一丶基本概念&Nacos架构1.为什么需要注册中心实现服务治理、服务动态扩容,以及调用时能有负载均衡的效果。如果我们将服务提供方的ip地址配置在服务消费方的配置文件中,当服务提供方实例上线下线,消费方都需要重启服务,导致二者耦合度过高。注册中心就是在......