次要就是一些拦截器链,@PreAuthorize,@PreFilter,@PostAuthorize和@PostFilter

认证AuthenticationManager

基于列表的ProviderManager实现,每个处理器都有机会解决验证胜利或失败

AuthenticationProvider获取适配的处理器

鉴权AccessDecisionManager

基于投票的 AccessDecisionManager 实现,投票决策管理器AccessDecisionVoter

根本实现:

RoleVoter投票ROLE_结尾的权限

AuthenticatedVoter用于辨别匿名、齐全身份验证和记住我身份验证的用户

RoleHierarchyVoter层级角色,容许您配置哪些角色admin(或权限)应该包含其余角色user(或权限)

AfterInvocationManager

调用后处理,批改平安对象调用理论返回的对象的办法

acl(域对象)访问控制列表

能够应用PermissionEvaluator接口 基于表达式的访问控制 hasPermission(target, permission)

boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission);第一种用于拜访被管制的域对象曾经加载的状况。

boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission);第二个版本用于未加载对象但其标识符已知的状况。

旨在表达式零碎和 Spring Security 的 ACL 零碎之间架起桥梁,容许您依据形象权限指定对域对象的受权束缚。它对 ACL 模块没有显式依赖,因而您能够依据须要将其替换为代替实现。

在spring-security-acl.jar里有建表语句,能够开箱即用AclService,AclEntryVoter等类

oauth2协定资源服务器和资源受权服务器

有两个我的项目,spring-security-oauth2和spring-security我的项目下的oauth2模块,目前spring把性能都迁徙到spring-security了,举荐应用spring-security。

spring-security的oauth2.0 客户端反对是通过oauth2Client() DSL(配置,fromLogin那里)办法实现的。资源服务器反对是通过 oauth2ResourceServer() DSL实现的,并且提供了一个OAuth2AuthorizedClientService开箱即用的类。受权服务器目前security还没有集成oauth2.0的,所以只能先用oauth2.0的,应用@EnableAuthorizationServer注解

提供了@RegisteredOAuth2AuthorizedClient注解,将受权的客户端存储在本人的OAuth2AuthorizedClientRepository。

ClientRegistrationRepository来示意客户端,能够通过 Spring Security DSL 提供。或者,这些也能够通过 Spring Boot 进行配置。

能够定义多个SecurityFilterChain,依据matches申请走不同的过滤器链

  @Bean  @Order(Ordered.HIGHEST_PRECEDENCE)  public SecurityFilterChain systemSecurityFilterChain(HttpSecurity http) throws Exception {        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);        http.getConfigurer(OAuth2AuthorizationServerConfigurer.class)                .authorizationEndpoint(config->{                    OAuth2AuthorizationEndpointConfigurer configurer = (OAuth2AuthorizationEndpointConfigurer) config;         });        return http.build();    }     @Bean    public SecurityFilterChain clientSecurityFilterChain(HttpSecurity http) throws Exception {        http.authorizeRequests()                .requestMatchers(requestMatchers).permitAll()                .anyRequest().denyAll().and()                .formLogin().and();        return http.build();    }