我目前有一个spring mvc应用程序,我试图添加spring security。但是,我无法使用@PreAuthorize
注释而不会收到以下错误:
bean初始化失败;嵌套异常是java.lang.NoClassDefFoundError:org / springframework / cglib / transform / impl / MemorySafeUndeclaredThrowableStrategy
我目前正在使用Spring Version 4.1.0和Spring Security 3.2.5,根据spring的文档和其他帖子在这里应该可以正常工作。 在他们的github上也有一个样本,似乎没有问题使用相同的版本。
有什么想法吗?
PreAuthorize标记已添加到Controller中,cglib位于类路径中,但仍然是相同的错误消息。有什么想法吗?
答案 0 :(得分:1)
原来这是版本问题。 Spring Security目前是3.2.5.Release,我正在使用,但Spring是4.1.0。 从4.0.2开始,一些cglib类已被删除。解决方案是在Spring中降至4.0.1,或使用4.0.0.M2里程碑版本来实现Spring安全性。
答案 1 :(得分:0)
@PreAuthorize是通过AOP实现的。如果未在类实现的接口中声明放置注释的方法,则Spring不能使用默认的JDK代理,而是使用CGLIB代理类。
错误建议您使用类代理,但在类路径中没有CGLIB。
两种解决方法:
@PreAuthorize
注释在服务层中更常见。通常,您对控制器中可能存在的内容使用基于URL的授权。解决问题的最佳方法是将@PreAuthorize
注释移动到应该已作为接口连接的服务类。