如何修复与Spring安全代理的val字段初始化?
考虑kotlin控制器类:
@RestController @RequestMapping("/myPath/") open class MyController { private val s3AsyncClient: S3AsyncClient = S3AsyncClient.builder().build() //... @PostMapping("/indexing") @Secured("ROLE_USER") fun someFunction() { return s3AsyncClient.toString(); } }
这导致NullPointerException。
这是我在调试器中看到的:
但是,当@Secured
被删除一切正常。 所以春天的安全代理似乎破坏了kotlin val的初始化。 有没有办法让他们一起工作?
事实证明,默认情况下,kotlin将所有方法标记为final
。 所以这些方法不能被覆盖,这就是为什么它是从对象本身调用的,而不是来自代理的。 所以要使代理工作只是在方法定义中添加open
关键字:
@PostMapping("/indexing") @Secured("ROLE_USER") /* -> */ open fun someFunction() { return s3AsyncClient.toString(); }
- 相同的其他端点具有不同的PathVariable
- 我不能在Springboot-Kotlin中排除MongoAutoConfiguration(MongoSocketOpenException)
- Spring 5和Kotlin 1.1协程:类型rx.Scheduler不存在
- 什么是开放的财产? 为什么我不能让自己的私人?
- Spring代理类和Kotlin中的空指针异常
- Kotlin与Spring DI:lateinit属性尚未初始化
- 使用kotlin-spring插件,还是得不到类的打开错误
- 如何判断我的Spring启动应用程序是否处于调试模式?
- Gradle脚本Kotlin和dependencyManagement