问题描述
|
在我的Web应用程序中,有时经过身份验证的管理员可能想假冒系统的另一个有效用户,而不必知道该用户的密码。
如何使用Spring Security使管理员用户能够模拟系统的普通(非管理员)用户?
Spring Security文档对此保持沉默,我在任何地方都找不到任何东西。肯定有人解决了这个问题。
谢谢!
解决方法
它在Spring Security 3和Spring Security 4文档中恰当地命名为“运行身份验证替换”。
在安全对象回调阶段,AbstractSecurityInterceptor能够临时替换SecurityContext和SecurityContextHolder中的Authentication对象。
, 我相信在Spring Security中推荐的方法是使用域访问控制列表,请参阅GrantedAuthoritySid @
http://static.springsource.org/spring-security/site/docs/3.1.x/reference/domain-acls.html
但是,模拟另一个用户不仅仅是拥有一个“代理身份”,您还应该考虑登录的含义:
您是否希望您的日志记录显示为“原始用户”或“模拟用户”(或两者都显示)?
您是否希望“模拟”仅显示模拟用户看到的内容,还是原始用户和模拟用户权限的超集?
还有另一种可能性是创建“以...身份登录”功能,该功能实质上会更改当前会话的主体身份-或使用模拟的身份开始新的会话。
在上述所有内容中,您可能会无意间提出了一个安全问题-因此,我认为这就是为什么模拟风格的功能并不常见的原因。而是,设计趋向于基于角色的访问控制(RBAC)或基于属性的访问控制(ABAC)。使用RBAC / ABAC,可以创建委托样式功能,在其中创建委托属性/角色-在特殊情况下,需要显示委托的源/目标(例如,审计日志),则将它们作为特殊情况处理。
, 如果您希望管理员用户可以模拟其他用户(例如,出于质量检查/测试目的),请查看SwitchUserFilter
这里提供了您需要的XML配置的一个不错的示例