如何暂时更改授予的角色以实现“将网站视为”其他人

时间:2010-04-01 19:49:53

标签: spring spring-security

我们现在正在使用2.x弹簧安全。我被要求构建一个管理工具,以便ROLE_ADMIN可以更改为站点中的任何用户并以该人员的身份查看站点(站点上的每个人可能会看到不同的东西,具体取决于基于数据库动态授予的角色)当然,管理员应该能够在不登录的情况下切换回管理员。

是否有内置功能,如果不是我应该怎么做?

提前致谢!

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

我不知道任何可以满足您要求的弹簧安全开箱即用解决方案,但我可以建议您实施它的方法。

  1. 使用查询参数声明“将网站视为”操作的网址以获取用户名,例如:/myApp/viewTheSiteAs?user=marley

  2. 编写您自己的自定义过滤器,执行以下操作:
    2.1验证经过身份验证的用户是“admin”用户
    2.2从动作中提取用户(“marley”:-))
    2.3验证它是否存在(使用UserDetailsS​​ervice)。
    2.4使用适合您已解压缩的用户的授权权限构造新的身份验证对象,并使用您自己的对象替换当前的身份验证对象:SecurityContextHolder.getContext().setAuthentication(myNewAuthObject)

  3. 在Spring安全配置文件中添加一个过滤器链,用于/ ViewTheSiteAs,它将充当常规过滤器链(应该将“真实”用户认证为常规),并在以下位置找到您的自定义过滤器链的末端。

  4. 执行以下操作将导致spring安全性认为来自viewTheSiteAs操作的用户是经过身份验证的操作,并通过该操作检查该用户的权限。

    P.S。 - 这不是安全漏洞,因为它降低了经过身份验证的用户权限,这意味着“功能较弱”的用户。

    祝你好运。