You need to enable JavaScript to run this app. Spring Security @PreAuthorize注解读取Kotlin挂起函数末尾参数异常
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security @PreAuthorize注解读取Kotlin挂起函数末尾参数异常

问题结论

该问题不属于Spring Security原生Bug,本质是Kotlin挂起函数编译特性与低版本Spring Security参数解析逻辑的适配问题。

原因说明

Kotlin的suspend函数编译时会自动在方法参数列表末尾插入一个Continuation类型的隐含参数,用于实现协程状态流转。你所使用的SpringBoot 2.5.0对应Spring Security版本尚未完成Kotlin挂起函数的全适配,当需要读取的参数刚好位于方法声明的参数列表末尾时,Spring Security的参数名称解析器会将编译后新增的Continuation参数和你声明的末尾业务参数绑定到一起,最终解析为包含实际值和续体对象的Object数组,就是你调试时看到的异常结果。

解决方案

  • 升级依赖版本:将SpringBoot升级至2.6.0及以上版本,对应版本的Spring Security已内置Kotlin挂起函数适配逻辑,会自动过滤编译插入的Continuation隐含参数,不会和业务参数绑定冲突。
  • 参数顺序调整:如果暂时无法升级版本,调整业务参数顺序,不要把需要在@PreAuthorize中引用的参数放在方法参数列表最后一位即可规避该问题。
  • 显式绑定参数:给需要在权限注解中读取的参数添加@Param("参数名")注解,强制Spring Security按显式指定的名称绑定参数,不受隐含参数干扰。

内容的提问来源于stack exchange,提问作者unD3R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 22:06:03