如何做模拟春(How to do impersonation in spring)

2019-10-20 19:22发布

我们有多个门户雇主门户,员工门户和管理门户网站,所有三大门户网站分别部署。 所有门户遵循弹簧MVC模式。 我们用春天的安全性和使用OpenID的登录和注销。

现在,我们想给管理员的门户功能,管理员可以冒充为雇员和雇主并代表他们做的事情。

与以前的经验任何机构可以引导我如何进行这项工作,或者可以共享,我可以读出了它获得良好的知识的任何好文章。

谢谢,

Answer 1:

从你的问题,它听起来并不像你真的想“runAsManager”。

一种方法是使用类似的“冒充”的方法,这本身就需要保护,当然,也许使用方法级别的安全注解。

对于这一点,你可以使用这样的:

@PreAuthorize("hasRole('ROLE_ADMIN')")

从本质上讲,你需要做的是建立一个认证对象,并填充安全上下文(ThreadLocal的)这一点。

就像是:

Authentication other = createAuthentication(someUsername); //Implement this
SecurityContextHolder.getContext().setAuthentication(other);

我可以看到这种做法的吸引力,但当然,它是否是一个好主意取决于你允许管理员代表用户做什么。 花自己的钱? 看到自己的邮件? 如果使用的情况下是有效的,至少审计这种操作。

一旦冒充这样其他用户,当前用户将需要注销并重新登录,切换回自己的账户。



文章来源: How to do impersonation in spring