如何在Spring Security中拦截hasRole配置的ROLE_MANAGER角色访问权限
解决方法
你需要的权限逻辑可以通过Spring Security的SpEL表达式的非运算符直接实现,不需要罗列所有允许的角色,适配后续新增角色的场景。
XML标签配置修改
把你现有配置的access属性值替换为否定ROLE_MANAGER的判断即可,最终写法如下:
<security:authorize access="!hasRole('ROLE_MANAGER')"> ... </security:authorize>
该配置的逻辑为:只要当前登录用户的角色不是ROLE_MANAGER,就允许访问对应内容,自动覆盖所有其他角色,不需要手动维护允许的角色列表。
可选:Java配置类对应写法
如果你使用Java类做权限配置,对应拦截逻辑的写法如下:
http.authorizeRequests() // 替换为你需要拦截的资源路径 .antMatchers("/target/path/**") .access("!hasRole('ROLE_MANAGER')");
说明
Spring Security 4及以上版本中,hasRole会自动给参数拼接ROLE_前缀,你也可以使用!hasAuthority('ROLE_MANAGER')写法,二者效果完全一致。
内容的提问来源于stack exchange,提问作者Kira
相关产品推荐
相关产品推荐

