我们现在正在使用2.x弹簧安全。我被要求构建一个管理工具,以便ROLE_ADMIN可以更改为站点中的任何用户并以该人员的身份查看站点(站点上的每个人可能会看到不同的东西,具体取决于基于数据库动态授予的角色)当然,管理员应该能够在不登录的情况下切换回管理员。
是否有内置功能,如果不是我应该怎么做?
提前致谢!
答案 0 :(得分:5)
使用现有的Spring SwitchUserFilter:
答案 1 :(得分:2)
我不知道任何可以满足您要求的弹簧安全开箱即用解决方案,但我可以建议您实施它的方法。
使用查询参数声明“将网站视为”操作的网址以获取用户名,例如:/myApp/viewTheSiteAs?user=marley
编写您自己的自定义过滤器,执行以下操作:
2.1验证经过身份验证的用户是“admin”用户
2.2从动作中提取用户(“marley”:-))
2.3验证它是否存在(使用UserDetailsService)。
2.4使用适合您已解压缩的用户的授权权限构造新的身份验证对象,并使用您自己的对象替换当前的身份验证对象:SecurityContextHolder.getContext().setAuthentication(myNewAuthObject)
在Spring安全配置文件中添加一个过滤器链,用于/ ViewTheSiteAs,它将充当常规过滤器链(应该将“真实”用户认证为常规),并在以下位置找到您的自定义过滤器链的末端。
执行以下操作将导致spring安全性认为来自viewTheSiteAs操作的用户是经过身份验证的操作,并通过该操作检查该用户的权限。
P.S。 - 这不是安全漏洞,因为它降低了经过身份验证的用户权限,这意味着“功能较弱”的用户。
祝你好运。