Spring Data 与 Spring Security

共 44 题
#

1. @PreAuthorize/@PostAuthorize 方法级安全(Method Security)的 SpEL 表达式与 AOP 实现

A @PreAuthorize 执行前校验、@PostAuthorize 执行后基于返回值校验,通过 AOP 的 MethodSecurityInterceptor 实现 ✓ 正确答案
B 两者都在方法执行后校验
C 方法级安全与 AOP 无关
D 只能使用 hasRole,不能使用自定义规则
#

2. JWT(Access Token)的生成与校验

A JWT 无需签名校验
B JWT 由 Header/Payload/Signature 组成,生成用密钥签名,校验用密钥或公钥验签并检查声明 ✓ 正确答案
C JWT 可以服务端主动撤销
D JWT 只包含 Header 一段
#

3. MethodSecurityInterceptor 与 AOP 的协作

A 它不能拦截方法调用
B 它只做 URL 级授权
C 它与 AOP 无关
D MethodSecurityInterceptor 作为 AOP 环绕通知拦截方法,用 AuthorizationManager 评估授权规则 ✓ 正确答案
#

4. SecurityContextHolder 与 ThreadLocal 的策略

A ThreadLocal 自动在异步线程间传播
B 默认 ThreadLocal 策略,线程独立持有安全上下文,异步需用 DelegatingSecurityContextExecutor 等传播 ✓ 正确答案
C 安全上下文与线程无关
D 无法设置传播策略
#

5. Spring Data JPA 在 Spring Boot 3.5+ 对 Hibernate 7 与 Jakarta Persistence 3.2(JPA 3.2)的兼容性要点

A 基于 Hibernate 7 与 JPA 3.2,需注意 jakarta 命名空间、API 迁移与 hibernate 配置调整 ✓ 正确答案
B 仍使用 javax.persistence 命名空间
C Hibernate 7 与旧版完全兼容
D JPA 3.2 无新特性
#

6. Spring Data Redis 在 Spring Boot 3.5+ 中 Lettuce/Jedis 客户端的默认切换

A 客户端与 classpath 无关
B 默认是 Jedis
C 无法切换客户端
D 默认 Lettuce,切换 Jedis 需排除 Lettuce 依赖并引入 Jedis,自动配置按 classpath 选择 ✓ 正确答案
#

7. Spring Data Redis 的 RedisTemplate/StringRedisTemplate

A StringRedisTemplate 支持任意对象
B 两者序列化完全相同
C RedisTemplate 默认 JDK 序列化支持对象,StringRedisTemplate 用字符串序列化,序列化不一致会导致数据错乱 ✓ 正确答案
D 序列化策略无关紧要
#

8. Spring Data 多数据源(@EnableJpaRepositories 多配置)在 Spring Boot 3.5+ 的配置细节

A 所有数据源共享一个 EntityManagerFactory
B 每个数据源需独立 DataSource/EntityManagerFactory/TransactionManager,并通过 @EnableJpaRepositories 指定 Repository 归属 ✓ 正确答案
C 多数据源无需配置事务管理器
D Repository 包随意扫描,自动匹配
#

9. Spring Security 7.0(Spring Boot 4.x)

A 移除废弃 API,全面采用 Lambda DSL 与 SecurityFilterChain,基于 Spring Framework 7 与 Jakarta EE 11 ✓ 正确答案
B 仍必须使用 WebSecurityConfigurerAdapter
C 继续使用 antMatchers
D 无 API 变化
#

10. Spring Security OAuth2 Resource Server 的 JWT 校验

A 校验只检查过期时间
B 资源服务器负责签发 JWT
C JWT 无需验签
D 通过 JwtDecoder 用密钥/公钥验签并检查声明,校验通过后建立认证上下文 ✓ 正确答案
#

11. Spring Data JPA 的 N+1 查询问题与解决(fetch join、@EntityGraph、批量抓取 batch_fetch_size)

A 只能靠手动循环
B N+1 无法解决
C 懒加载不会产生 N+1
D fetch join、@EntityGraph、batch_fetch_size 分别从一次加载、声明实体图、批量抓取角度消除 N+1 ✓ 正确答案
#

12. OAuth 2.0 与 Passkey 的共存策略

A Passkey 是授权框架
B 二者互斥,只能选一个
C Passkey 用于认证身份,OAuth 2.0 用于授权发放令牌,二者分层协作 ✓ 正确答案
D OAuth 管认证,Passkey 管授权
#

13. @Transactional 在 Repository 方法的默认语义

A 所有方法默认读写事务
B Repository 方法无事务
C 查询方法默认只读事务,修改方法默认读写事务,跨方法事务应在 Service 层组织 ✓ 正确答案
D 事务边界只能在 Repository 定义
#

14. FilterInvocationSecurityMetadataSource 的动态 URL 权限

A 它负责令牌签发
B 它只能静态配置权限
C 它提供 URL 的授权属性,可自定义从数据库动态加载 URL-权限映射 ✓ 正确答案
D 它只负责登录认证
#

15. JpaRepository 的方法命名派生查询(findByXxxAndYxx)与 @Query 的优先级

A 两者冲突时随机
B 方法名派生查询优先于 @Query
C 同时存在时 @Query 优先,方法名不再解析 ✓ 正确答案
D @Query 只能用于原生 SQL
#

16. OAuth 2.0 的 FAPI(Financial-grade API)

A FAPI 允许明文令牌
B FAPI 与标准 OAuth 2.0 相同,无额外要求
C FAPI 是金融级 OAuth 2.0 扩展,强制 PKCE、非对称签名、sender-constrained token、JARM 等高安全要求 ✓ 正确答案
D FAPI 不使用 PKCE
#

17. OAuth 2.0 的授权码模式(Authorization Code)

A 授权码模式不需要客户端密钥
B 授权码直接就是访问令牌
C 授权码经用户授权后由客户端用 client_secret 在令牌端点换取令牌,令牌不暴露给浏览器 ✓ 正确答案
D 授权码会直接返回给浏览器
#

18. OAuth 2.0 的角色(Resource Owner/Client/Authorization Server/Resource Server)

A Resource Owner 授权、Client 请求授权、Authorization Server 发令牌、Resource Server 校验令牌 ✓ 正确答案
B Client 负责认证用户
C Resource Server 负责发放令牌
D 四个角色必须分属不同服务器
#

19. OAuth 2.1 的简化与 PKCE 的强制

A OAuth 2.1 移除隐式与密码模式,强制授权码 + PKCE,提升安全默认 ✓ 正确答案
B OAuth 2.1 保留所有旧模式
C PKCE 在 2.1 中仍可选
D OAuth 2.1 取消了授权码模式
#

20. SecurityFilterChain 与 WebSecurityConfigurerAdapter 的演进

A 两者都必须继承使用
B WebSecurityConfigurerAdapter 已废弃,替代为 SecurityFilterChain + Lambda DSL 配置模型 ✓ 正确答案
C WebSecurityConfigurerAdapter 仍是主流
D SecurityFilterChain 无法配置多链
#

21. SecurityFilterChain 在 Spring Security 7 中的多链配置与 HttpSecurity 组合

A 只能有一个安全链
B 多个 SecurityFilterChain 按 requestMatchers 匹配,按声明顺序第一个匹配者生效 ✓ 正确答案
C 多链无法应用不同安全策略
D 匹配顺序无关紧要
#

22. Spring Data Elasticsearch 的工程应用

A 它不支持分页
B 它只能做简单查询
C 它替代 MySQL 存储全部数据
D 通过 ElasticsearchRepository 提供搜索/聚合,@Document 映射索引,常与 MySQL 配合同步数据 ✓ 正确答案
#

23. Spring Data JPA 与 Kotlin/Scala 的边界

A Scala 与 JPA 兼容性最好
B JPA 与所有语言完全兼容
C Kotlin data class 原生支持 JPA 懒加载
D Kotlin data class 与 JPA 兼容较好但需处理 final/代理问题,Scala 与 JPA 兼容较差 ✓ 正确答案
#

24. Spring Data JPA 的 Auditing(@CreatedDate/@LastModifiedDate)

A 审计字段需手动设置
B @EnableJpaAuditing + 实体审计注解 + AuditorAware 自动填充创建/修改时间与人员 ✓ 正确答案
C Auditing 无需开启
D @CreatedDate 由数据库时间戳代替
#

25. Spring Data JPA 的 Optional 返回值约定

A Optional 适用于多结果查询
B Optional 返回 null 表示无结果
C findById 等单结果查询返回 Optional,无结果返回 Optional.empty(),强制空值处理 ✓ 正确答案
D 查询方法不能返回 Optional
#

26. Spring Data JPA 的 Repository 抽象(JpaRepository/PagingAndSortingRepository)

A JpaRepository 继承 PagingAndSortingRepository 与 CrudRepository,提供 CRUD、分页排序及 JPA 特有能力 ✓ 正确答案
B JpaRepository 只提供分页
C Repository 是功能最全的接口
D 各接口能力相同
#

27. Spring Data MongoDB 的 Repository 模式

A Repository 不支持查询方法
B 只能使用 MongoTemplate
C MongoRepository 支持方法名派生查询、@Query 与分页,复杂聚合用 MongoTemplate ✓ 正确答案
D 文档映射与 @Document 无关
#

28. Spring Data MongoDB 的聚合管道(Aggregation Pipeline)

A 聚合管道不支持分组
B 聚合只能做单条查询
C 聚合管道由 $match/$group/$project 等阶段组成,用 Aggregation 构建并由 MongoTemplate 执行 ✓ 正确答案
D 聚合与 Repository 无关
#

29. Spring Data R2DBC(反应式)的边界

A 它返回同步对象
B 它支持 @Transactional 阻塞事务
C 提供 ReactiveCrudRepository 返回 Mono/Flux,事务需用 TransactionalOperator,适合 WebFlux 全链路 ✓ 正确答案
D 它适合阻塞栈混用
#

30. Spring Data REST 的过度暴露风险

A 自动暴露无需任何防护
B 自动暴露 Repository 可能泄露数据或允许非法操作,需用 exported=false 收敛并加权限控制 ✓ 正确答案
C 它只暴露 GET 接口
D 无法控制暴露范围
#

31. Spring Data 与 Spring Modulith 的事件协作

A 两者互不相关
B Spring Data 的 @DomainEvents 发布实体事件,Spring Modulith 负责模块间事件编排与投递 ✓ 正确答案
C 事件只能手动发布
D 模块间事件无法跨模块投递
#

32. Spring Data 模块的版本兼容矩阵

A Spring Boot 通过 BOM 统一锁定各 Spring Data 模块版本,保证兼容 ✓ 正确答案
B 各模块版本随意指定
C 版本与 Spring Boot 无关
D 只需管理 JPA 模块版本
#

33. Spring Data 自定义 Repository 片段

A 自定义接口 + Impl 实现类,Repository 继承后由 Spring 组合成代理 ✓ 正确答案
B 自定义方法无法加入 Repository
C 实现类命名无约定
D 自定义片段会覆盖默认实现
#

34. Spring Security 6.x 的 Lambda DSL 配置

A Lambda DSL 无法配置授权
B 必须使用 and() 连接
C Lambda DSL 只能在 5.x 使用
D Spring Security 6 用 Lambda 表达式链式配置 HttpSecurity,替代旧的 and() 方法 ✓ 正确答案
#

35. Spring Security 与 CORS 的协作配置顺序,CorsFilter 应在 SecurityFilterChain 之前处理预检请求

A CORS 与 Security 无法共存
B 预检请求也需认证,应由 Security 先处理
C 顺序无关紧要
D CorsFilter 应在 SecurityFilterChain 之前处理 OPTIONS 预检,避免无认证的预检被拒绝 ✓ 正确答案
#

36. Spring Security 的 ACL 模块

A ACL 是对象级授权,针对特定领域对象存储并查询权限,实现细粒度控制 ✓ 正确答案
B ACL 只做 URL 级授权
C ACL 与具体对象无关
D ACL 无需存储权限
#

37. Spring Data 分页(Pageable/Sort)的实现与深分页(大 offset)的性能问题与优化

A offset 越大性能越好
B 大 offset 需扫描丢弃前 N 行性能差,keyset/游标分页基于索引定位可避免 ✓ 正确答案
C 深分页无需优化
D 游标分页比 offset 分页更慢
#

38. Spring Data JPA 的乐观锁(@Version)与悲观锁(@Lock)的使用边界与冲突处理

A 悲观锁不阻塞
B 乐观锁加数据库锁
C @Version 乐观锁版本冲突时抛异常,@Lock 悲观锁查询加数据库锁,按冲突概率与一致性选择 ✓ 正确答案
D 两者等价
#

39. Spring Security 7 对 OpenID Connect(OIDC)的支持与登录流程

A OIDC 在 OAuth 2.0 上加身份层,oauth2Login 用授权码流程校验 id_token 建立身份认证 ✓ 正确答案
B OIDC 与身份无关
C OIDC 不提供 id_token
D Spring Security 7 不支持 OIDC
#

40. Spring Security 的过滤器链(FilterChain)

A 只有一个过滤器
B 过滤器顺序无关
C SecurityFilterChain 由多个过滤器按顺序执行,前面认证、后面授权、异常由 ExceptionTranslationFilter 转换 ✓ 正确答案
D 过滤器与认证无关
#

41. UserDetailsService 与 AuthenticationProvider 在自定义认证中的协作边界

A UserDetailsService 负责加载用户,AuthenticationProvider 负责认证逻辑,DaoAuthenticationProvider 结合二者 ✓ 正确答案
B 两者都负责加载用户
C AuthenticationProvider 只加载用户
D 两者互不相关
#

42. 异常处理入口(AuthenticationEntryPoint/AccessDeniedHandler)的未认证与无权限区分

A 两者都处理登录
B 两者都返回 401
C 两者都返回 403
D AuthenticationEntryPoint 处理未认证返回 401,AccessDeniedHandler 处理已认证无权限返回 403 ✓ 正确答案
#

43. Spring Data R2DBC(响应式数据库)在 JDK 25 虚拟线程下的应用取舍

A 虚拟线程使 R2DBC 完全无用
B 虚拟线程让阻塞 JDBC 变简单,但全链路反应式/流式场景仍用 R2DBC 保持非阻塞 ✓ 正确答案
C R2DBC 只适合阻塞栈
D 虚拟线程下必须用 R2DBC
#

44. Spring Data JPA 批量更新/删除(@Modifying 与 @Query)为何需要 clearAutomatically/flushAutomatically 配置

A 批量操作无需配置
B clearAutomatically 执行后清空持久化上下文,flushAutomatically 执行前自动 flush,保证批量操作一致 ✓ 正确答案
C 两者都无用
D 只配置一个即可