Heim  >  Artikel  >  Java  >  Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

王林
王林nach vorne
2023-05-11 22:55:041023Durchsuche

    1. Einführung

    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?

    2. Laden der Spring Security-Filterkette

    1.2. Registrieren Sie einen Filter mit dem Namen springSecurityFilterChain

    Wenn das Spring Boot-Projekt gestartet wird, Die Klasse SecurityFilterAutoConfiguration lädt den Registrierungsfilter DelegatingFilterProxyRegistrationBean mit dem Namen springSecurityFilterChain. SecurityFilterAutoConfiguration类会加载 DelegatingFilterProxyRegistrationBean注册过滤器,名字为 springSecurityFilterChain

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

    注意:springSecurityFilterChain名字是固定写死的。

    DelegatingFilterProxyRegistrationBean 注册成功后,该过滤器就被加载了到了注册器中。然后调用getFilter()方法生成 DelegatingFilterProxy代理对象并注册到 IOC中 。

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

    3、查看 DelegatingFilterProxy类

    我们访问项目,就会进入 DelegatingFilterProxy类的 doFilter方法。

    DelegatingFilterProxy类本质也是一个 Filter,其间接实现了 Filter接口,但是在 doFilter中其实调用的从 Spring 容器中获取到的代理 Filter的实现类。

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

    返回的 FilterChainProxy对象。

    由此可知,DelegatingFilterProxy类通过 springSecurityFilterChain这个名称,得到了一个 FilterChainProxy过滤器,最终执行的是这个过滤器的 doFilter方法。

    验证 springSecurityFilterChain名词不能修改
    查看 initDelegate方法。

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

    4.查看 FilterChainProxy类

    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;

    4.1 查看 doFilterInternal方法

    惊不惊喜?15个过滤器都在这里了!

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

    4.2 查看 getFilters方法

    原来这些过滤器都被封装进 SecurityFilterChain对象中。

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

    5 查看 SecurityFilterChain接口

    SecurityFilterChain类是个接口,实现类也只有一个 DefaultSecurityFilterChain类。
    DefaultSecurityFilterChain类的构造方法,初始化了 List filters,是通过传参放进去的。

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

    过滤器链参数是什么时候传入的?

    6. 查看 SpringBootWebSecurityConfiguration类

    创建 Spring Security 过滤器链是交给 Spring boot 自动配置,由 SpringBootWebSecurityConfiguration类创建注入。

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?

    查看 WebSecurityConfigurerAdapter

    SpringBoot integriert den Ausführungsprozess zum Laden der Spring Security-Filterkette. Was ist

    Was ist der Ausführungsprozess von SpringBoot, das das Laden der Spring Security-Filterkette integriert?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.

    SpringBoot integriert den Ausführungsprozess zum Laden der Spring Security-Filterkette. Was ist

    3. Sehen Sie sich die DelegatingFilterProxy-Klasse an

    #🎜🎜#Wenn wir auf das Projekt zugreifen, geben wir den doFilterdes 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. #🎜🎜##🎜🎜#SpringBoot integriert den Ausführungsprozess zum Laden der Spring Security-Filterkette. Was ist #🎜🎜##🎜🎜#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. #🎜🎜##🎜🎜#SpringBoot integriert den Ausführungsprozess zum Laden der Spring Security-Filterkette. Was ist #🎜🎜##🎜🎜#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. #🎜🎜##🎜🎜#SpringBoot integriert den Ausführungsprozess zum Laden der Spring Security-Filterkette. Was ist #🎜🎜##🎜🎜#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!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen