java – 在扩展另一个类的控制器的方法上使用Spring Security注释

我有一个非常相似的spring-security bean配置到this example.如果控制器方法的@Secured注释位于不是另一个类的子类的方法上,它只能正常工作.换句话说,以下代码不起作用(在bean初始化期间引发的异常):

@Controller
@RequestMapping("/systeminfo")
public class SystemInfoController extends AbstractViewableController {

    @RequestMapping(method = RequestMethod.GET, value = "/")
    @Secured("ROLE_USER") // an exception below was raised
    public void view(HttpServletRequest request) {
    }
}

这是一个例外:

org.springframework.beans.factory.BeanCreationException: Error creating bean wit
h name 'systemInfoController' defined in file [C:\workspace\my\my-webapp
\target\classes\my\webapp\controller\SystemInfoController.class]: Initializa
tion of bean failed; nested exception is org.springframework.aop.framework.AopCo
nfigException: Could not generate CGLIB subclass of class [class my.webapp.c
ontroller.SystemInfoController]: Common causes of this problem include using a f
inal class or a non-visible class; nested exception is net.sf.cglib.core.CodeGen
erationException: java.lang.RuntimeException-->RequestMapping annotation cannot
be found on my.webapp.controller.SystemInfoController$$EnhancerByCGLIB$$e99f
e366

所以我按照指令here并将proxy-target-class =“true”添加到< global-method-security ...> (不确定它是否相关)但安全方面仍然丢失.但是,如果删除了超类,则正确应用安全性,即转发到登录页面.

当控制器需要扩展另一个类时,有谁知道发生了什么以及如何解决问题?

最佳答案
您是否在security.xml文件中启用了安全注释

<global-method-security secured-annotations="enabled" />

而且,这些注释仅适用于Spring bean.您需要注入这些bean而不仅仅是创建普通实例.尝试使用Spring Dependency Injection.

转载注明原文:java – 在扩展另一个类的控制器的方法上使用Spring Security注释 - 代码日志