Spring Boot 프로젝트에서는 Spring Security 종속성을 도입하고 프로젝트가 시작되면 Spring Security가 적용되고 액세스 요청이 차단됩니다.
Spring Boot는 Spring Security를 위한 자동화된 구성 솔루션을 제공하므로 더 적은 구성으로 Spring Security를 사용할 수 있습니다.
그렇다면 이 필터 체인은 어떻게 차단을 로드하고 구현합니까?
Spring Boot 프로젝트가 시작되면 SecurityFilterAutoConfiguration
클래스가 DelegatingFilterProxyRegistrationBean
등록을 로드합니다. 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
참고: springSecurityFilterChain의 이름은 고정되어 있습니다.
DelegatingFilterProxyRegistrationBean
등록이 성공적으로 완료되면 필터가 레지스터에 로드됩니다. 그런 다음 getFilter() 메서드를 호출하여 DelegatingFilterProxy
프록시 객체를 생성하고 이를 IOC
에 등록합니다.
3. DelegatingFilterProxy 클래스 보기
DelegatingFilterProxy
클래스의 doFilter
메서드를 입력합니다. 🎜🎜DelegatingFilterProxy 클래스는 본질적으로 Filter 인터페이스를 간접적으로 구현하는 Filter이지만 doFilter에서는 실제로 Spring 컨테이너에서 얻은 프록시 Filter 구현 클래스를 호출합니다. 🎜🎜🎜🎜
FilterChainProxy
개체가 반환되었습니다. 🎜🎜DelegatingFilterProxy
클래스가 springSecurityFilterChain
이라는 이름을 통해 FilterChainProxy
필터를 획득하고 이 필터의 최종 실행은 doFilter메서드. 🎜🎜springSecurityFilterChain 명사가 수정될 수 없는지 확인하세요🎜initDelegate 메소드를 확인하세요. 🎜🎜🎜 🎜4. FilterChainProxy 클래스를 확인하세요🎜🎜 FilterChainProxy
클래스는 기본적으로 필터이므로 doFilter
메서드를 확인하세요. 이 클래스의 속성에 주의하세요. 🎜rrreee🎜4.1 doFilter 내부 메소드 보기🎜🎜놀랐나요? 15개의 필터가 모두 여기에 있습니다! 🎜🎜🎜 🎜4.2 getFilters 메소드 보기🎜🎜이러한 필터는 SecurityFilterChain 개체에 캡슐화되어 있는 것으로 나타났습니다. 🎜🎜🎜 🎜5 SecurityFilterChain 인터페이스 보기🎜🎜SecurityFilterChain
클래스는 인터페이스이며 구현 클래스에는 DefaultSecurityFilterChain
클래스가 하나만 있습니다. 🎜DefaultSecurityFilterChain
클래스의 생성자는 매개변수를 전달하여 입력되는 목록 필터를 초기화합니다. 🎜🎜🎜 🎜필터 체인 매개변수는 언제 전달되나요? 🎜🎜6. SpringBootWebSecurityConfiguration 클래스 보기🎜🎜Spring Security
생성 필터 체인은 자동 구성을 위해 Spring boot
로 전달되고 SpringBootWebSecurityConfiguration에 의해 생성 및 주입됩니다.
클래스. 🎜🎜 🎜 🎜 WebSecurityConfigurerAdapter
클래스를 확인하세요. 🎜🎜🎜🎜🎜그런 다음 HttpSecurity 개체가 주입됩니다. HttpSecurity는 Spring Security의 인증 및 권한 부여와 관련된 필터 체인, 요청 일치 경로 및 기타 중요한 방법을 저장하는 Spring Security의 http 핵심 구성으로 이해할 수 있습니다. 🎜🎜그런 다음 Spring Boot에 의해 자동으로 구성되는 Spring Security 필터 체인을 만들기 시작했습니다. 총 15개의 필터가 있습니다. 🎜프록시로 OrderedFilter를 사용하고 order 속성을 설정하세요. 🎜추가가 완료된 후 이러한 필터를 DefaultSecurityFilterChain 개체로 캡슐화합니다. 🎜마지막으로 WebSecurityConfiguration 구성을 통해 springSecurityFilterChain을 로드합니다. securityFilterChains 속성은 WebSecurityConfiguration에서 유지되며 모든 필터를 필터 체인에 저장합니다.
위 내용은 Spring Security 필터 체인 로딩을 통합한 SpringBoot의 실행 프로세스는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!