Spring安全性@secure不使用角色层次结构

我在spring security spring-securityConfig.xml使用spring security中的角色层次结构

     ROLE_ADMIN > ROLE_WORKFLOW ROLE_ADMIN > ROLE_ISBN_INSERTION ROLE_ADMIN > ROLE_PERMISSION_UPDATE ROLE_ADMIN > ROLE_ASSIGNMENT ROLE_ADMIN > ROLE_CALIBRATION                                                          ${ldap.userDnPatterns}                    

在服务方法中,我使用@Secured({ "ROLE_PERMISSION_UPDATE"})如果具有角色ROLE_ADMIN的用户登录到应用程序并尝试访问此安全方法,则它会抛出访问被拒绝的exception。

我找到了解决方案

    

dispatcher-servlet.xml添加它。 弹簧安全应该有不同的背景

  contextConfigLocation  WEB-INF/applicationContext.xml WEB-INF/dispatcher-servlet.xml   

到你的web.xml并在applicationContext.xml导入spring-security.xml这样做的唯一目的是为spring安全性提供单独的上下文。

要应用基于方法的安全性来处理角色层次结构,请使用@PreAuthorize("SpEL")代替@Secured({})

您只为DefaultWebSecurityExpressionHandler启用了roleHierarchy,它将对您的http请求起作用,但不对@Secured注释起作用。 也将它添加到DefaultMethodSecurityExpressionHandler