У меня очень похожая конфигурация bean-компонентов безопасности для в этом примере .Примечание @Secured
к методам контроллера работает правильно только в том случае, если оно относится к методу класса, который не подклассирует другой класс.Другими словами, следующий код не работает (исключение возникает во время инициализации компонента):
@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
Поэтому я следую инструкции здесь и добавьте proxy-target-class="true"
к <global-method-security ...>
(не уверен, связано ли это), но аспект безопасности все еще теряется.Однако, если суперкласс удален, то защита будет применена должным образом, то есть переадресация на страницу входа.
Кто-нибудь знает, что происходит и как решить проблему, когда контроллеру необходимо расширить другойкласс?