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

灵芝产品网站建设方案06627网页制作与网站建设

灵芝产品网站建设方案,06627网页制作与网站建设,公司做的局域网网站怎么登陆,无锡百度竞价推广Spring Security Spring Security是spring框架中的安全框架。简单学习一下。做一些记录方便回顾。 DelegatingFilterProxy DelegatingFilterProxy作为Servlet的filter实现。在请求到达servlet之前,做过滤处理。   DelegatingFilterProxy这个过滤器,主…

Spring Security

  Spring Security是spring框架中的安全框架。简单学习一下。做一些记录方便回顾。

DelegatingFilterProxy

  DelegatingFilterProxy作为Servlet的filter实现。在请求到达servlet之前,做过滤处理。
  DelegatingFilterProxy这个过滤器,主要职责是将业务处理,交给它的属性,类型为FilterChainProxy的类处理。FilterChainProxy是从我们应用的IOC容器中获取。
在这里插入图片描述

FilterChainProxy

  作为过滤器业务逻辑的实现。它的里面有一个属性filterChains,里面是SecurityFilterChain对象的集合。
  主要逻辑是根据请求路径匹配到对应的SecurityFilterChain对象,然后调用SecurityFilterChain中的过滤器,完成逻辑处理。
在这里插入图片描述

SecurityFilterChain

  过滤逻辑的主要实现。对应不同的请求,有不同的功率器处理。
  类里面有个匹配规则,只有符合这个规则的请求才会调用类里面的过滤器处理。
在这里插入图片描述

SpringSecurity启动流程

在这里插入图片描述
  一般我们都是新增一个配置类。标注注解@Configuration,@EnableWebSecurity。继承类WebSecurityConfigurerAdapter。
  @Configuration配置类就不过多记录了。会将@Bean注入到IOC容器。

EnableWebSecurity

在这里插入图片描述
  可以看到,这个注解@EnableWebSecurity导入三个类。WebSecurityConfiguration,SpringWebMvcImportSelector,OAuth2ImportSelector。自动注入注解:@EnableGlobalAuthentication。

WebSecurityConfiguration

  WebSecurityConfiguration是一个配置类。主要的就是构建FilterChainProxy类型的类。放入容器中的bean名称为:springSecurityFilterChain

在这里插入图片描述
在这里插入图片描述
  配置类加载的时候,有个自动注入的配置。将容器中SecurityConfigurer类型的bean注入到当前配置类。我们自定的配置类继承WebSecurityConfigurerAdapter,WebSecurityConfigurerAdapter实现WebSecurityConfigurer,WebSecurityConfigurer接口继承SecurityConfigurer。也就是说,我们自己写的配置类也会被加载进来。
在这里插入图片描述
  断点我们可以看到,自己的配置类在构建FilterChainProxy类型的过滤器时,被加载了进来。
在这里插入图片描述
  webSecurity.build() -->doBuild()来完成过滤器类的构建。里面有几个核心方法。init(),configure(),performBuild()。都是调用配置类中的相关方法。入参都为WebSecurity。
在这里插入图片描述
  以下是适配类WebSecurityConfigurerAdapter中对应init方法的实现。

public void init(final WebSecurity web) throws Exception {// 看这里,看这里。getHttp方法,构建HttpSecurity对象,里面初始化配置了默认的过滤器。将HttpSecurity放入到WebSecurity。final HttpSecurity http = getHttp();// 根据httpSecurity构建SecurityFilterChainBuildweb.addSecurityFilterChainBuilder(http).postBuildAction(() -> {FilterSecurityInterceptor securityInterceptor = http.getSharedObject(FilterSecurityInterceptor.class);web.securityInterceptor(securityInterceptor);});}protected final HttpSecurity getHttp() throws Exception {if (http != null) {return http;}AuthenticationEventPublisher eventPublisher = getAuthenticationEventPublisher();localConfigureAuthenticationBldr.authenticationEventPublisher(eventPublisher);AuthenticationManager authenticationManager = authenticationManager();authenticationBuilder.parentAuthenticationManager(authenticationManager);Map<Class<?>, Object> sharedObjects = createSharedObjects();http = new HttpSecurity(objectPostProcessor, authenticationBuilder,sharedObjects);if (!disableDefaults) {// @formatter:offhttp.csrf().and().addFilter(new WebAsyncManagerIntegrationFilter()).exceptionHandling().and().headers().and().sessionManagement().and().securityContext().and().requestCache().and().anonymous().and().servletApi().and().apply(new DefaultLoginPageConfigurer<>()).and().logout();// @formatter:onClassLoader classLoader = this.context.getClassLoader();List<AbstractHttpConfigurer> defaultHttpConfigurers =SpringFactoriesLoader.loadFactories(AbstractHttpConfigurer.class, classLoader);for (AbstractHttpConfigurer configurer : defaultHttpConfigurers) {http.apply(configurer);}}// 我们一般重写这个方法,加载自己自定义的配置过滤。configure(http);return http;}

  performBuild方法的实现。构建SecurityFilterChain对象,封装为FilterChainProxy类型的过滤器。
在这里插入图片描述  ignoredRequests就是我们configure配置的相关规则的过滤。通过webSecurity的ignoring()方法返回IgnoredRequestConfigurer对象,然后调用其方法为WebSecurity的ignoredRequests属性添加RequestMatcher对象。
在这里插入图片描述
  securtiyFilterChainBuilder也可以自己配置。不配置默认是在init()方法实现的时候,根据HttpSecurity构建。
在这里插入图片描述
  也就是说如果我有多个类继承WebSecurityConfigurerAdapter,那么构建FilterChainProxy的时候,就会为每一个类生成一个SecurityFilterChain。WebSecurityConfigurerAdapter里面都有默认的实现,你的子类可以重写一些方法重新增加一些配置。

SecurityBuild

  构建器,相关复杂对象的构建。比如:FilterChainProxy类型的过滤器,SecurityFilterChain过滤器。
在这里插入图片描述
  第一次执行构建FilterChainProxy的时候,调用init()方法,遍历配置类的init方法。我这里项目中配置了授权的配置类:AuthorizationServerConfiguration,资源管理的配置类:ResourceServerConfig,webSecurity的配置类:WebSecurityConfiguration。
  1. init()方法获取所有的配置类,就是上面我配置的三个。
在这里插入图片描述
  2. 跟进第一个授权的配置类,研究它的过程。进入WebSecurtiyConfigurerAdapter的init方法。
在这里插入图片描述
  3. 接着看getHttp()方法。里面创建了HttpSecurity对象。
在这里插入图片描述
  4. 我们看httpSecurity的第一个配置。http.csrf()。里面创建了一个CsrfConfigurer对象。getOrAppy方法接着调用apply方法。在apply方法中,调用add方法,将这个配置类传了进来,配置类存入abstractConfiguredSecurityBuilder的内部属性configurers中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  5. 我们把抽象类中的httpSecurity的构建继续走,可以发现,对应的配置都会产生一个配置类,存入到内部属性中。
在这里插入图片描述
  6. 我们把抽象类中的httpSecurity的构建走完,下方有一个configure方法,入参是创建好的httpSecurity对象。这个是要给抽象方法,有子类实现。我们现在跟进的是AuthorizationServerSecurityConfiguration,进入这个类中的方法。
在这里插入图片描述
在这里插入图片描述
  7. getHttp()方法走完。我们获取到HttpSecurtiy对象(目前我们执行的配置类是授权的配置类)。HttpSecurtiy本身也是实现了SecurityBuild。调用WebSecurityaddSecurityFilterChainBuilder方法,将HttpSecurity对象存在WebSecurity的内部属性securityFilterChainBuilders中。
在这里插入图片描述
  下面的postBuildAction方法,将FilterSecurityInterceptor添加到WebSecurity的属性filterSecurityInterceptor。
在这里插入图片描述
  到此,授权配置类的init方法执行完毕。后面的资源配置类,webSecurity配置类可以自行dubug跟进学习。后面的configure方法过程类型,也是循环遍历配置类,调用配置类的configure方法。performBuild()方法见上文。将我们WebSecurity里面存的HttpSecurity取出来,调用HttpSecurity的build方法构建SecurityFilterChain对象(build过程也是一样的生命周期,init,config,performBuild。不同的是里面的配置类不一样,基本上每个配置类都是构建一个过滤器类添加到SecurityFilterChain中),并将其作为入参保存到FilterChainProxy对象里面。
在这里插入图片描述

小结

  总的来说,就是一个继承WebSecurityConfigurerAdapter的类,就会产生一条过滤器链securityFilterChain,这个过滤器链处理或者匹配的请求规则是通过配置httpSecurity进行配置,httpSecurity.requestMatchers()配置哪些请求的url进行过滤httpSecurity.authorizeRequests()配置对过滤的请求如何进行控制(比如哪些需要授权认证,哪些不需要授权认证)

http.requestMatchers()
.antMatchers("/api/order/**","/api/money/**")
.and().authorizeRequests()
.antMatchers("/api/money/**").authenticated()
.antMatchers("/api/order/test/**").permitAll()

  上面配置的含义是:对/api/order//api/money/两个url生效。(即当请求匹配这两个url其中之一时,才会进行安全控制,其他url可直接访问。)当一个请求的url匹配其中之一后,才会进入这个过滤器链。进入过滤器链后,匹配 /api/money的请求全部需要认证后才能访问,而匹配/api/order/test/的请求可以直接访问。
  requestMatchers()配置的是哪些url进行安全控制,authorizeRequests()配置的是如何进行控制
  我们的请求进来后,先经过DelegatingFilterProxy–》DelegatingFilterProxy内部调用FilterChainProxy–》FilterChainProxy根据请求路径,匹配对应的SecurityFilterChain–》调用SecurityFilterChain里面的过滤器进行业务处理。


文章转载自:

http://ctSHF2Gd.dksLm.cn
http://aVrtQWxV.dksLm.cn
http://JXg0XZBt.dksLm.cn
http://M9c6Ju0u.dksLm.cn
http://2AOFJpR7.dksLm.cn
http://HCkBHRKG.dksLm.cn
http://qkS6oNMu.dksLm.cn
http://1aoETq0k.dksLm.cn
http://gpLJKYTu.dksLm.cn
http://0yxamzkq.dksLm.cn
http://KSadgAzE.dksLm.cn
http://zjs5ALBz.dksLm.cn
http://OElDAxpg.dksLm.cn
http://MQwfZBIx.dksLm.cn
http://GtafZRLg.dksLm.cn
http://E1FG6qLm.dksLm.cn
http://zTXIoLsJ.dksLm.cn
http://Lxpt3X9L.dksLm.cn
http://NI8uxzMV.dksLm.cn
http://f0054WVw.dksLm.cn
http://1WNIBMtW.dksLm.cn
http://BEHLREV1.dksLm.cn
http://LK6tnAsS.dksLm.cn
http://GDusUeEx.dksLm.cn
http://vz1rNV0A.dksLm.cn
http://SFeNq03q.dksLm.cn
http://XKzebMgv.dksLm.cn
http://z0gRn2e4.dksLm.cn
http://2GZj6DDF.dksLm.cn
http://GdbzXoUf.dksLm.cn
http://www.dtcms.com/wzjs/773229.html

相关文章:

  • 找人做仿网站男科医院排名最好的医院
  • 做企业英语网站要注意哪些自己做交易网站
  • 青岛企业建站厦门的网站建设公司哪家好
  • 北京市电力建设公司网站国际建设管理学会网站
  • 惠州市网站制作公司常州做网站基本流程
  • 企业网站php模板下载海报设计大赛
  • 做一个网站需要哪些英文网站怎么做推广
  • 怎么做淘宝一样的网站设计作品发布平台
  • 网站意识形态建设网站制作思路
  • 做网站数据需要的软件做文案的网站有些什么
  • iis7.5 查看网站流量php做二手商城网站源码
  • 网站服务器用哪个好网站建设规范
  • 鹤岗市城乡建设局网站百度爱采购优化软件
  • 顺德品牌网站建设优惠wordpress常规选项
  • 做网站编码常州做网站的企业
  • 南昌网站制作公司东莞建设网办事指南
  • 百度手机网站优化指南免费查企业信息的平台
  • 加强二级部门网站建设网站屏蔽右键
  • 手机网站建设视频教程、织梦网站必须下载地址
  • 永久免费的网站网络平台推广哪个好
  • 网站推广基本方法网站建设方案说明
  • 做外贸都得有网站吗做网站怎么拿框架的原代码
  • 阿里云营销网站建设德州网站制作公司
  • 中标建设集团有限公司 网站前端 网站开发 常见功能实现
  • 北京外贸网站建设公司网站添加关键词
  • 重庆市住建厅网站网页开发工资多少
  • 门户网站代码怎么登陆wordpress后台
  • 佛山购物网站建设松江移动网站建设
  • 自助微信网站遂宁市城市建设档案馆网站
  • 网站建设公司现在还挣钱吗个人网站怎么做联盟推广