Im Spring Boot-Projekt führen wir die Spring Security-Abhängigkeit ein und unternehmen nichts Spring Security wird wirksam und die Zugriffsanfrage wird abgefangen.
Spring Boot bietet eine automatisierte Konfigurationslösung für Spring Security, die es Ihnen ermöglicht, Spring Security mit weniger Konfiguration zu verwenden.
Wie lädt und implementiert diese Filterkette das Abfangen?
Wenn das Spring Boot-Projekt gestartet wird, Die Klasse SecurityFilterAutoConfiguration
lädt den Registrierungsfilter DelegatingFilterProxyRegistrationBean
mit dem Namen springSecurityFilterChain
. SecurityFilterAutoConfiguration
类会加载 DelegatingFilterProxyRegistrationBean
注册过滤器,名字为 springSecurityFilterChain
。
注意:springSecurityFilterChain名字是固定写死的。
DelegatingFilterProxyRegistrationBean
注册成功后,该过滤器就被加载了到了注册器中。然后调用getFilter()方法生成 DelegatingFilterProxy
代理对象并注册到 IOC
中 。
我们访问项目,就会进入 DelegatingFilterProxy
类的 doFilter
方法。
DelegatingFilterProxy类本质也是一个 Filter,其间接实现了 Filter接口,但是在 doFilter中其实调用的从 Spring 容器中获取到的代理 Filter的实现类。
返回的 FilterChainProxy
对象。
由此可知,DelegatingFilterProxy
类通过 springSecurityFilterChain
这个名称,得到了一个 FilterChainProxy
过滤器,最终执行的是这个过滤器的 doFilter
方法。
验证 springSecurityFilterChain名词不能修改
查看 initDelegate方法。
FilterChainProxy
类本质也是一个 Filter,所以查看 doFilter
方法。留意该类里面的属性。
public class FilterChainProxy extends GenericFilterBean { private static final Log logger = LogFactory.getLog(FilterChainProxy.class); private static final String FILTER_APPLIED = FilterChainProxy.class.getName().concat(".APPLIED"); // 过滤器链 private List<SecurityFilterChain> filterChains; private FilterChainProxy.FilterChainValidator filterChainValidator; private HttpFirewall firewall;
惊不惊喜?15个过滤器都在这里了!
原来这些过滤器都被封装进 SecurityFilterChain对象中。
SecurityFilterChain
类是个接口,实现类也只有一个 DefaultSecurityFilterChain
类。DefaultSecurityFilterChain
类的构造方法,初始化了 List filters,是通过传参放进去的。
过滤器链参数是什么时候传入的?
创建 Spring Security
过滤器链是交给 Spring boot
自动配置,由 SpringBootWebSecurityConfiguration
类创建注入。
查看 WebSecurityConfigurerAdapter
Hinweis: Der Name von springSecurityFilterChain ist festgelegt.
DelegatingFilterProxyRegistrationBean
Nach erfolgreicher Registrierung wird der Filter in das Register geladen. Rufen Sie dann die Methode getFilter() auf, um das Proxy-Objekt DelegatingFilterProxy
zu generieren und es im IOC
zu registrieren.
3. Sehen Sie sich die DelegatingFilterProxy-Klasse an
doFilter
des DelegatingFilterProxy Klasse >Methode. #🎜🎜#<blockquote>#🎜🎜#Die DelegatingFilterProxy-Klasse ist im Wesentlichen ein Filter, der indirekt die Filter-Schnittstelle implementiert, aber in doFilter ruft er tatsächlich die aus dem Spring-Container erhaltene Proxy-Filter-Implementierungsklasse auf. #🎜🎜#</blockquote>#🎜🎜#<img src="https://img.php.cn/upload/article/000/465/014/168381690836993.jpg" alt="SpringBoot integriert den Spring Security-Filter Was Ist die Kette ein Ausführungsprozess? ">#🎜🎜##🎜🎜#Das zurückgegebene <code>FilterChainProxy
-Objekt. #🎜🎜##🎜🎜# Es ist ersichtlich, dass die Klasse DelegatingFilterProxy
einen Filter FilterChainProxy
über den Namen springSecurityFilterChain
erhält, was schließlich der Fall ist ausgeführt Es ist die doFilter
-Methode dieses Filters. #🎜🎜##🎜🎜#Stellen Sie sicher, dass das Nomen springSecurityFilterChain nicht geändert werden kann#🎜🎜#Sehen Sie sich die initDelegate-Methode an. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#4. Schauen Sie sich die FilterChainProxy-Klasse an#🎜🎜##🎜🎜#FilterChainProxy
-Klasse ist im Wesentlichen ein Filter, also schauen Sie sich doFilter an Code> Methode. Achten Sie auf die Eigenschaften dieser Klasse. #🎜🎜#rrreee#🎜🎜#4.1 DoFilterInternal-Methode anzeigen#🎜🎜##🎜🎜#Sind Sie überrascht? Alle 15 Filter sind da! #🎜🎜##🎜🎜#<img src="https://img.php.cn/upload/article/000/465/014/168381690950328.jpg" alt="SpringBoot integriert den Ausführungsprozess zum Laden der Spring Security-Filterkette. Was ist ">#🎜🎜##🎜🎜#4.2 Sehen Sie sich die getFilters-Methode an#🎜🎜##🎜🎜#Es stellt sich heraus, dass diese Filter im SecurityFilterChain-Objekt gekapselt sind. #🎜🎜##🎜🎜#<img src="https://img.php.cn/upload/article/000/465/014/168381690994772.png" alt="SpringBoot integriert den Ausführungsprozess zum Laden der Spring Security-Filterkette. Was ist">#🎜🎜##🎜🎜#5 SecurityFilterChain-Schnittstelle anzeigen#🎜🎜##🎜🎜#<code>SecurityFilterChain
-Klasse ist eine Schnittstelle, und es gibt nur eine Implementierungsklasse DefaultSecurityFilterChain Code> Art. #🎜🎜#Der Konstruktor der Klasse <code>DefaultSecurityFilterChain
initialisiert Listenfilter und fügt sie durch Übergabe von Parametern ein. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Wann werden die Filterkettenparameter übergeben? #🎜🎜##🎜🎜#6. SpringBootWebSecurityConfiguration-Klasse anzeigen#🎜🎜##🎜🎜#Erstellen der Spring Security
-Filterkette wird zur automatischen Konfiguration an Spring Boot
übergeben , durch die Klasse SpringBootWebSecurityConfiguration
wird die Injektion erstellt. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Sehen Sie sich die Klasse WebSecurityConfigurerAdapter
an. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜# Dann wird das HttpSecurity-Objekt als die http-Kernkonfiguration von Spring Security verstanden, in der die Filterkette und der Anforderungsübereinstimmungspfad gespeichert werden usw. in Spring Security. Wichtige Methoden im Zusammenhang mit Authentifizierung und Autorisierung. #🎜🎜##🎜🎜#Dann haben wir mit der Erstellung der Spring Security-Filterkette begonnen, die von Spring Boot automatisch konfiguriert wurde. Insgesamt gibt es 15 Filter. #🎜🎜#Verwenden Sie OrderedFilter als Proxy und legen Sie das Bestellattribut fest. #🎜🎜#Nachdem das Hinzufügen abgeschlossen ist, kapseln Sie diese Filter in DefaultSecurityFilterChain-Objekte. #🎜🎜#Schließlich wird springSecurityFilterChain über die WebSecurityConfiguration-Konfiguration geladen. Das securityFilterChains-Attribut wird in WebSecurityConfiguration verwaltet, das alle Filter in der Filterkette speichert.
Das obige ist der detaillierte Inhalt vonWas ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!