如何修复与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(); }
- Spring数据Elasticsearch与Kotlin数据类的脚本字段导致Jackson序列化问题
- Kotlin编译器返回:未解决的引用:Spring 5.0中的springframework
- Spring Boot 2&Spring 5错误服务index.html
- 如何禁用RepositoryRestHandlerMapping和EndpointHandlerMapping?
- Spring Annotation @Transactional忽略了Kotlin中未经检查的异常
- 与AsyncRestTemplate Netty客户端的Spring启动失败
- 在Grails中可以使用Kotlin吗?
- Java vs Kotlin – 同一个类中的Spring @Async方法
- 使用Aspect将响应标题添加到所有控制器