栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Spring Security 3中动态创建新的角色和权限

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Spring Security 3中动态创建新的角色和权限

因此,这些至少是两个问题:

如何使授予的权限/特权/角色动态化?
如何使URL的访问限制动态化?
1)如何使授予的权限/特权/角色动态化?
我不会详细回答这个问题,因为我相信这个主题经常被讨论。


最简单的方法是将完整的用户信息(登录名,密码和角色)存储在数据库(3个表:User,Roles,User2Roles)中并使用

JdbcDetailService
。您可以在xml配置中很好地配置两个SQL语句(用于身份验证和授予角色)。

但是随后,用户需要注销并登录以获取这些新角色。如果这是不可接受的,那么您还必须操纵当前登录用户的角色。它们存储在用户会话中。我想最简单的方法是在spring安全过滤器链中添加一个过滤器,以更新每个请求的角色(如果需要更改)。

2)如何使URL的访问限制动态化?
在这里,您最后有两种方法:

  • 入侵

    FilterSecurityInterceptor
    和更新
    securitymetadataSource
    ,所需的角色应存储在此处。至少您必须操纵方法的输出
    DefaultFilterInvocationSecuritymetadataSource#lookupAttributes(String url, String method)

  • 另一种方法是对

    access
    属性使用其他表达式,而不是
    access="hasRole('ROLE_USER')"
    。范例:
    access="isAllowdForUserPages1To3"
    。当然,您必须创建该方法。这被称为“自定义SpEL表达式处理程序”(如果您有Spring Security 3 Book,则在第210页左右。希望他们有章号!)。因此,您现在需要做的是继承
    WebSecurityexpressionRoot
    并引入一个新方法
    isAllowdForUserPages1To3
    。然后,您需要对方法进行子类化
    DefaultWebSecurityexpressionHandler
    和修改,
    createevaluationContext
    以便其第一个请求
    StandartevaluationContext
    调用
    super
    (您需要将结果转换为
    StandartevaluationContext
    )。然后,使用您的新实现替换rootObject中的。那是困难的部分!然后,你需要更换的属性
    (StandartevaluationContextCustomWebSecurityexpressionRootexpressionHandlerexpressionVoterWebexpressionVoter)
    ,并在xml配置中添加新的子类
    DefaultWebSecurityexpressionHandler
    。(这很烂,因为您首先需要明确地编写许多安全配置,因为您不能直接从安全名称空间访问它们。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/365271.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号