电商网站建设培训wordpress的用法

news/2025/10/6 20:36:09/文章来源:
电商网站建设培训,wordpress的用法,山东省 安全双体系建设网站,禹城建设局网站文章目录 问题引入 1#xff1a;问题阐述 2#xff1a;问题分析 一#xff1a;从SpringBoot的自动装配 1#xff1a;SpringBootApplication介绍 2#xff1a;自动装配的核心方法 3#xff1a;核心方法的调用路径 4#xff1a;SpringSecurity核心配置 5#xf…文章目录 问题引入 1问题阐述 2问题分析 一从SpringBoot的自动装配 1SpringBootApplication介绍 2自动装配的核心方法 3核心方法的调用路径 4SpringSecurity核心配置 5SpringBoot...Configuration详解 6总结一下 大神链接作者有幸结识技术大神孙哥为好友获益匪浅。现在把孙哥视频分享给大家。 孙哥链接孙哥个人主页 作者简介一个颜值99分只比孙哥差一点的程序员 本专栏简介话不多说让我们一起干翻SpringSecurity6 本文章简介话不多说让我们讲清楚SpringSecurity6中为什么在引入SpringSecurity之后所有的请求都需要先做登录认证才可以进行访问呢 问题引入 1问题阐述 为什么在引入SpringSecurity之后所有的请求都需要先做登录认证才可以进行访问呢 2问题分析 分析清楚这个问题之前我们先从自动装配开始研究。 一从SpringBoot的自动装配 1SpringBootApplication介绍 这个注解的作用就是标志这个类是SpringBootApplication的启动类。 SpringBootApplication public class BigtreeApplication {public static void main(String[] args) {SpringApplication.run(BigtreeApplication.class, args);} } Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Inherited SpringBootConfiguration EnableAutoConfiguration ComponentScan(excludeFilters {Filter(type FilterType.CUSTOM,classes {TypeExcludeFilter.class} ), Filter(type FilterType.CUSTOM,classes {AutoConfigurationExcludeFilter.class} )} ) public interface SpringBootApplication {AliasFor(annotation EnableAutoConfiguration.class)Class?[] exclude() default {};AliasFor(annotation EnableAutoConfiguration.class)String[] excludeName() default {};AliasFor(annotation ComponentScan.class,attribute basePackages)String[] scanBasePackages() default {};AliasFor(annotation ComponentScan.class, attribute basePackageClasses)Class?[] scanBasePackageClasses() default {};AliasFor(annotation ComponentScan.class,attribute nameGenerator)Class? extends BeanNameGenerator nameGenerator() default BeanNameGenerator.class;AliasFor( annotation Configuration.class)boolean proxyBeanMethods() default true; } 这个注解是一个复合注解SpringBootConfiguration这个注解的作用带表了这当前这个类是一个SpringBoot配置类自动交给SpringIOC容器进行管理。 第二个注解是ComponentScan这个注解的作用是定义Spring的扫描路径的。通畅对应我们自己定义的组件例如ControllerServiceDao这些组件。 第三个注解是EnableAutoConfiguration这个注解是SpringBoot自动装配的关键注解这个注解包含两个核心注解 第一个注解是Import({AutoConfigurationImportSelector.class})这个注解的作用就是在导入当前类的同时顺便导入AutoConfigurationImportSelector这个类也加载进来。 2自动装配的核心方法 org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations protected ListString getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {ListString configurations ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).getCandidates();Assert.notEmpty(configurations,No auto configuration classes found in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.);return configurations;} org.springframework.boot.context.annotation.ImportCandidates public static ImportCandidates load(Class? annotation, ClassLoader classLoader) {Assert.notNull(annotation, annotation must not be null);ClassLoader classLoaderToUse decideClassloader(classLoader);String location String.format(LOCATION, annotation.getName());EnumerationURL urls findUrlsInClasspath(classLoaderToUse, location);ListString importCandidates new ArrayList();while (urls.hasMoreElements()) {URL url urls.nextElement();importCandidates.addAll(readCandidateConfigurations(url));}return new ImportCandidates(importCandidates);} 此方法执行完毕的返回值 这个配置在spring-boot-autoconfigure-3.0.12.jar包下!\META-INF\spring\包下的 org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中这里边就是Spring中的各种需要自动装配的组件。其中就有很多的配置组件。 3核心方法的调用路径 main1 prio5 tid0x1 nidNA runnablejava.lang.Thread.State: RUNNABLEat org.springframework.boot.context.annotation.ImportCandidates.load(ImportCandidates.java:90)at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getCandidateConfigurations(AutoConfigurationImportSelector.java:180)at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getAutoConfigurationEntry(AutoConfigurationImportSelector.java:126)at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector$AutoConfigurationGroup.process(AutoConfigurationImportSelector.java:430)at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGrouping.getImports(ConfigurationClassParser.java:796)at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:726)at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:697)at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:182)at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:415)at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:287)at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344)at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:115)at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:779)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597)- locked 0x12a7 (a java.lang.Object)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:733)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:435)at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)at com.dashu.AlibabaApplication.main(AlibabaApplication.java:10) 这个调用路径是怎么获得的方法很简单只需要在这个核心方法的中间打上一个断点。 然后我们启动main方法等线程执行过这个方法的断点。然后我们在idea上玩一个骚操作就可以了。 然后我们在debug区域找到最上层一个方法然后我们右键Exports Thread即可。  4SpringSecurity核心配置 org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration AutoConfiguration ConditionalOnClass(DefaultAuthenticationEventPublisher.class) EnableConfigurationProperties(SecurityProperties.class) Import({ SpringBootWebSecurityConfiguration.class, SecurityDataConfiguration.class }) public class SecurityAutoConfiguration {BeanConditionalOnMissingBean(AuthenticationEventPublisher.class)public DefaultAuthenticationEventPublisher authenticationEventPublisher(ApplicationEventPublisher publisher) {return new DefaultAuthenticationEventPublisher(publisher);}} 然后就会加载这两个组件SpringBootWebSecurityConfiguration.class, SecurityDataConfiguration.class 尤其是第一个。 5SpringBoot...Configuration详解 这里边只有一个Bean注解最终会创建一个对象SecurityFilterChain为什么最终引入了SpringSecurity依赖之后就会所有的请求都会被拦截答案就在这个方法里边。 BeanOrder(SecurityProperties.BASIC_AUTH_ORDER)SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {//任意Http请求都会被认证拦截http.authorizeHttpRequests().anyRequest().authenticated();//认证的时候支持form表单认证http.formLogin();//http的basic认证http.httpBasic();return http.build();} Configuration(proxyBeanMethods false) ConditionalOnWebApplication(type Type.SERVLET) class SpringBootWebSecurityConfiguration {Configuration(proxyBeanMethods false)ConditionalOnDefaultWebSecuritystatic class SecurityFilterChainConfiguration {BeanOrder(SecurityProperties.BASIC_AUTH_ORDER)SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests().anyRequest().authenticated();http.formLogin();http.httpBasic();return http.build();}}Configuration(proxyBeanMethods false)ConditionalOnMissingBean(name BeanIds.SPRING_SECURITY_FILTER_CHAIN)ConditionalOnClass(EnableWebSecurity.class)EnableWebSecuritystatic class WebSecurityEnablerConfiguration {}} 6总结一下 基于SpringBoot的自动装配由于SpringSecurity的装配配置在SpringBoot配置环境中所以它默认会被加载加载完毕之后defaultSecurityFilterChain被调用SecurityFilterChain对象被创创建。所有的方法都会被被鉴权。 具体的方法调用路径或者叫配置路径是这样的首先是三个核心的注解 SpringBootApplication- EnableAutoConfigurationImport(AutoConfigurationImportSelector) 这样的代码就会基于下面这个调用路径 main1 prio5 tid0x1 nidNA runnablejava.lang.Thread.State: RUNNABLEat org.springframework.boot.context.annotation.ImportCandidates.load(ImportCandidates.java:90)at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getCandidateConfigurations(AutoConfigurationImportSelector.java:180)at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.getAutoConfigurationEntry(AutoConfigurationImportSelector.java:126)at org.springframework.boot.autoconfigure.AutoConfigurationImportSelector$AutoConfigurationGroup.process(AutoConfigurationImportSelector.java:430)at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGrouping.getImports(ConfigurationClassParser.java:796)at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:726)at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:697)at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:182)at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:415)at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:287)at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344)at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:115)at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:779)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597)- locked 0x12a7 (a java.lang.Object)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:733)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:435)at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)at com.dashu.AlibabaApplication.main(AlibabaApplication.java:10) 调用到这个方法里边AutoConfigurationImportSelector#getCandidateConfigurations最后查到核心组件的配置文件。这样加载到SpringSecurity的核心文件。最终调用到上边的方法导致所有的方法都得进行登录认证。 二默认认证方式的条件限制 1ConditionalOnDefaultWebSecurity 此注解显示了要想使用下面SpringSecurity的默认认证方式是有条件的。 也就是说并不是所有的Http请求都必须走默认认证。进入这个注解 Target({ ElementType.TYPE, ElementType.METHOD }) Retention(RetentionPolicy.RUNTIME) Documented Conditional(DefaultWebSecurityCondition.class) public interface ConditionalOnDefaultWebSecurity {} 这个注解上边还有一个注解Conditional(DefaultWebSecurityCondition.class) class DefaultWebSecurityCondition extends AllNestedConditions {DefaultWebSecurityCondition() {super(ConfigurationPhase.REGISTER_BEAN);}ConditionalOnClass({ SecurityFilterChain.class, HttpSecurity.class })static class Classes {}ConditionalOnMissingBean({ SecurityFilterChain.class })static class Beans {}} 在这个类当中我们定义了两种鉴权规则。第一种是基于Class他是基于类作用也就是说当前在classpath下如果有上述两个class的话就可以走默认的认证方式。在SpringSecurity中肯定是有的这也就是在引入SpringSecurity依赖之后就会走默认的配置。 第二种是基于丢失Bean的情况如果丢失了那么我们可以走默认的认证规则了。也就是说如果没有了SecurityFilterChain这个对象的话那么就不在使用默认的认证规则了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:003 flutter初始文件讲解(2)

详细介绍:003 flutter初始文件讲解(2)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

为什么 Java 中打印Object类型的变量无需强转,而从Object类型的数组中取元素却要强转?

两个奇怪的现象 case1:打印Object对象时,无需强转: Object val = 25; System.out.println(val); // 直接打印,输出:25 // 不需要:(String)val 或 (Integer)valcase2:当我们要使用Object 数组中的元素时,需要强…

商城网站源代码html5网站模板 免费

定义 考手刹的专业称呼是辅助制动器,与制动器的原理不同,其是采用钢丝拉线连接到后制动蹄上,以对车子进行制动。作用 用于平地斜坡停车时制动,防止车子在无人状态下自动滑跑,逼免发生交通事故。工作原理 其原…

定制开发开源AI智能名片S2B2C商城小程序在无界零售中的应用与行业智能升级示范研究 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站建设样板四平网站建设联系方式

1,背景: 在本地java开发完毕之后,想要打包成docker镜像,方便安装。由于本地没有docker环境,也懒得装了。有一台测试的linux机器可以使用,所以先在本地打包生成xxx.jar,然后拷贝到有docker环境的…

网站主页 优帮云做乡村旅游的网站

<Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成&#xff0c;并可以在等待时渲染一个加载状态。 异步依赖​ 要了解 <Suspense> 所解决的问题和它是如何与异步依赖进行交…

自助企业建站模板网络营销平台的主要功能

构造函数初始化列表以一个冒号开始&#xff0c;接着是以逗号分隔的数据成员列表&#xff0c;每个数据成员后面跟一个放在括号中的初始化式。例如&#xff1a;[cpp] view plaincopyclass CExample { public: int a; float b; //构造函数初始化列表 CExampl…

WinReanimator恶意软件清除指南:详细步骤与工具使用

本文详细介绍了WinReanimator流氓安全程序的危害特征,并提供了使用Malwarebytes Anti-Malware工具进行扫描和清除的完整操作步骤,帮助用户彻底移除该恶意软件及相关感染文件。如何清除WinReanimator(清除指南) 该程…

Git的使用技巧 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

251006

目录JT-JY7T2S1-1JT-JY6T2S1-2FT-(TED&VOAs) JT-JY7T2S1-1Hello, Motor insurance departemnt. Oh, hello, id like to ask about insurace for my car. Yeah, of course, i was just take a few detailes, whats …

2025国庆Day5

模拟赛 T1 枚举b3 n^2 处理出a_b1^a_b2=x的所有情况(满足b2<i) 然后枚举b4,计算答案 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #…

网站建设项目功能需求分析报告wordpress克隆菜单

第一题&#xff1a;打酱油 小明带着 N 元钱去买酱油。 酱油 10 块钱一瓶&#xff0c;商家进行促销&#xff0c;每买 3 瓶送 1 瓶&#xff0c;或者每买 5 瓶送 2 瓶。 请问小明最多可以得到多少瓶酱油。 输入格式 输入的第一行包含一个整数 N&#xff0c;表示小明可用于买酱油的…

南宁京象建站公司江苏威达建设有限公司网站

一&#xff0c;iOS覆盖率报告生成逻辑 iOS覆盖率报告生成与Android有很大的不同&#xff0c;主要的生成逻辑如下&#xff1a; 1&#xff0c;将profraw文件&#xff0c;通过命令xcrun llvm-profdata merge -sparse转换成profdata; 2&#xff0c;再将profdata文件&#xff0c;通…

字节跳动开源图标库:2000+图标一键换肤的魔法 - 教程

字节跳动开源图标库:2000+图标一键换肤的魔法 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

Photoshop启用钢笔绘制图形

Photoshop启用钢笔绘制图形pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

代码随想录打卡|Day51 图论(dijkstra(堆优化版)精讲、Bellman_ford 算法精讲) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

自动化数据操作平台获3000万美元融资

自动化数据操作平台Pantomath获得3000万美元B轮融资,该平台利用AI技术扩展传统数据可观测性功能,通过自主AI代理实现事件自修复,帮助企业减少数据停机时间并提升数据可靠性。自动化数据操作平台Pantomath获3000万美…

常见排序算法详解与C语言实现 - 详解

常见排序算法详解与C语言实现 - 详解2025-10-06 20:00 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…

网站开发专业介绍pc开奖网站开发

已在内核代码中添加EmbedSky_hello驱动为例&#xff0c;进行内核编译时候出现了一下几个问题&#xff1a;1、在 /opt/EmbedSky/linux 2.6.30.4/drivers/char目录下修改“Kconfig”文件&#xff0c;添加如下内容&#xff1a;config EmbedSky_HELLOtristate "TQ2440/SKY2440…

南宁网站建设长春网站配图尺寸

在当今数字化金融时代&#xff0c;股票接口成为连接量化交易策略与金融市场的桥梁&#xff0c;为投资者提供了高效、准确的数据获取和交易执行功能。 一、股票接口的基本原理&#xff1a; 股票接口是量化交易系统的核心组成部分&#xff0c;它负责连接投资者的交易程序与金融市…