当前位置: 首页 > 面试题库 >

Spring Security不适用于“ hasRole('ROLE_ADMIN')”或ROLE_ADMIN

余弘新
2023-03-14
问题内容

我正在使用Spring
Security版本4.1。如果指定access="hasRole('ROLE_ADMIN')"access="ROLE_ADMIN"在安全配置中,我可以登录,但无法访问我的管理页面。

<security:http use-expressions="true">
    <security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
    <!-- security:intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')" / -->
    <security:intercept-url pattern="/createmanufsensors" access="isAuthenticated()" />
</security:http>
<security:global-method-security secured-annotations="enabled"></security:global-method-security>

下面是调试错误:

DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Secure object: FilterInvocation: URL: /admin; Attributes: [hasRole('ROLE_ADMIN')]     
2016-06-25 10:07:53,667 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.intercept.FilterSecurityInterceptor] Previously Authenticated: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@cc305a73: Principal: org.springframework.security.core.userdetails.User@74b46745: Username: francatore                                                  ; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN                                ; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@166c8: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: 7F702A6911A71EA5556C750B6D424FF5; Granted Authorities: ROLE_ADMIN                                   
2016-06-25 10:07:53,667 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.access.vote.AffirmativeBased] Voter: org.springframework.security.web.access.expression.WebExpressionVoter@170ea084, returned: -1
2016-06-25 10:07:53,668 [] DEBUG [http-bio-8080-exec-10] [org.springframework.security.web.access.ExceptionTranslationFilter] Access is denied (user is not anonymous); delegating to AccessDeniedHandler

我可能会缺少什么?


问题答案:

我对此有一个小的解释。在这里,您已通过普通用户身份验证,但无权查看管理员页面。

如果您使用的是access="hasRole('ROLE_ADMIN')"表达式,那么Spring
EL类(即SecurityExpressionRoot)将为 ROLE_
我们在hasRole()表达式中提供的每个角色添加前缀。因此,根据您的情况,您提供的角色可以hasRole('ROLE_ADMIN')解决ROLE_ROLE_ADMIN

因此,您被认证为具有的用户ROLE_ADMIN。但是对于Spring Security框架,要查看管理页面,用户必须具有角色
ROLE_ROLE_ADMIN (因为SecurityExpressionRoot该类添加了ROLE_前缀)。

因此,为此ROLE_在代码中删除该前缀,即在这里access="hasRole('ADMIN')" ,Spring
Security将ROLE_自动添加该前缀。并确保您已将数据库中的管理员角色指定为ROLE_ADMIN



 类似资料:
  • 我使用的是Spring Security版本4.1。如果我在安全配置中指定或,我可以登录,但无法访问我的管理页面。 下面是调试错误:

  • 作为标题,我不知道为什么他们在VSCode或Android Studio中的终端内置不起作用。 bash:flatter:未找到命令 我已经在~/中设置了Flutter路径。bash_profile.这里是的结果 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dot net:~/。dot net/tools:/Appli

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。

  • 问题内容: 我无法在注解中使用方法。也给。我想念什么?虽然效果很好。 我正在从数据库向用户分配权限。 问题答案: 你必须命名前缀你的权威来使用,看到Spring Security的参考 : HttpServletRequest.isUserInRole(String)将确定是否包含具有传递给的角色。通常,用户不应将“ ROLE_”前缀传递给此方法,因为它是自动添加的。例如,如果要确定当前用户是否具