java - @RolesAllowed 干扰 @RequestMapping
问题描述
在 Spring Boot 应用程序中,仅使用注释,我想实现安全性
我在@EnableGlobalMethodSecurity(jsr360Enabled=true)
配置类中添加了一个。该类也有@EnableSecurity
注释
现在,当我将 a 添加@RolesAllowed
到任何@RestController
类时,无论是在方法级别还是级别,启动日志根本不会列出该类。相反,有一行:
'Rejected bean name (rest controller class): no URL paths identified'
。
有谁知道可能是什么原因造成的?
解决方案
在@M.Deinum 让我走上这条路之后,我做了一些阅读并做出了解释。如果有人可以详细说明或纠正我更多的技术细节,请感到非常欢迎。
Spring 代理类将 bean 连接在一起。
- 未实现接口的类通过使用 CGLib 来代理,以创建具有附加功能的子类
- 实现接口的类,spring 使用动态代理来访问类的功能,但这样做只能代理接口方法。
就我而言,我的控制器实现了一个带有非端点相关方法的接口,所以 spring 忽略了所有处理方法,并且 RequestMappingHandlerMapping 没有找到任何要绑定的方法,因为如果只是“看到”类上的接口方法
using@EnableGlobalMethodSecurity(proxyTargetClass=true)
强制使用 CGLib,因此我们的映射器可以识别完整的方法。