SecurityConfigurer
是Spring Security Config
对安全配置器的概念建模接口,该接口约定了Spring Security Config
的各种安全配置器实现类的统一行为:
- 调用方法
#init
初始化安全构建器; - 调用方法
#configure
配置安全构建器;
这是一个泛型接口,泛型参数O
来表示所要配置的安全构建器SecurityBuilder
要构建的目标对象类型(O
可以理解成是Output
的缩写)。泛型参数B
表示当前安全配置器所要初始化和配置的安全构建器类型(B
可以理解成是Builder
的缩写)。
一个SecurityBuilder
上可以应用多个SecurityConfigurer
。如果一个SecurityBuilder
上要应用多个SecurityConfigurer
,所有的SecurityConfigurer
的#init
方法的调用需要早于任何一个SecurityConfigurer
的#configure
方法的调用。关于这一定义,在Spring Security Config
关于SecurityBuilder
的抽象实现类AbstractConfiguredSecurityBuilder
中可以看到。
源代码
源代码版本 : Spring Security Config 5.1.4.RELEASE
package org.springframework.security.config.annotation;
/**
* Allows for configuring a SecurityBuilder. All SecurityConfigurer first
* have their #init(SecurityBuilder) method invoked. After all
* #init(SecurityBuilder) methods have been invoked, each
* #configure(SecurityBuilder) method is invoked.
*
* @see AbstractConfiguredSecurityBuilder
*
* @author Rob Winch
*
* @param <O> The object being built by the SecurityBuilder B
* @param <B> The SecurityBuilder that builds objects of type O. This is also the
* SecurityBuilder that is being configured.
*/
public interface SecurityConfigurer<O, B extends SecurityBuilder<O>> {
/**
* Initialize the SecurityBuilder. Here only shared state should be created
* and modified, but not properties on the SecurityBuilder used for building
* the object. This ensures that the #configure(SecurityBuilder) method uses
* the correct shared objects when building.
*
* @param builder
* @throws Exception
*/
void init(B builder) throws Exception;
/**
* Configure the SecurityBuilder by setting the necessary properties on the
* SecurityBuilder.
*
* @param builder
* @throws Exception
*/
void configure(B builder) throws Exception;
}