Java 如何在春天进行模拟

Java 如何在春天进行模拟,java,spring-mvc,spring-security,impersonation,Java,Spring Mvc,Spring Security,Impersonation,我们有多个门户——雇主门户、员工门户和管理门户,这三个门户都是单独部署的。所有门户都遵循SpringMVC模式。我们使用了spring安全性,并使用openId进行登录和注销 现在,我们想给管理员门户功能,管理员可以冒充员工和雇主,并代表他们做事情 任何有经验的人都可以指导我如何处理它,或者可以分享我能读到的好文章,以便更好地了解它 谢谢,从你的问题来看,听起来你并不是真的想要“runAsManager” 一种方法是使用类似于“模拟”方法的东西,当然,它本身需要得到保护,可能使用方法级安全注释

我们有多个门户——雇主门户、员工门户和管理门户,这三个门户都是单独部署的。所有门户都遵循SpringMVC模式。我们使用了spring安全性,并使用openId进行登录和注销

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

任何有经验的人都可以指导我如何处理它,或者可以分享我能读到的好文章,以便更好地了解它


谢谢,

从你的问题来看,听起来你并不是真的想要“runAsManager”

一种方法是使用类似于“模拟”方法的东西,当然,它本身需要得到保护,可能使用方法级安全注释

为此,您可以使用以下内容:

@PreAuthorize("hasRole('ROLE_ADMIN')")
Authentication other = createAuthentication(someUsername); //Implement this
SecurityContextHolder.getContext().setAuthentication(other);
本质上,您需要做的是构建一个身份验证对象,并用它填充安全上下文ThreadLocal

比如:

@PreAuthorize("hasRole('ROLE_ADMIN')")
Authentication other = createAuthentication(someUsername); //Implement this
SecurityContextHolder.getContext().setAuthentication(other);
我可以看到这种方法的吸引力,但当然,这是否是一个好主意取决于您允许管理员代表用户做什么。花他们的钱?看到他们的电子邮件了吗?如果用例是有效的,至少要审核这种操作


模拟其他用户后,当前用户需要注销并再次登录以切换回自己的帐户。

我是否必须将员工和雇主门户覆盖在管理门户上,或者我们可以登录雇主门户?如果您使用相同的框架并拥有相同的用户源,那么,您是否允许管理员用户登录到其他两个门户,然后在其中的每一个门户中提供一种方法,以成为权限较低的用户?如果是这样,那么我认为您不需要覆盖,不。您在雇主/雇员应用程序中使用单个MVC方法和安全服务方法提供功能。