spring-mvc - 如何在Spring中使用SwitchUserFilter模拟用户?

标签 spring-mvc spring-security impersonation magnolia

我不了解 Spring 模拟用户。

我已经浏览了一些用于模拟用户的配置示例代码,并注意到 SwitchUserFilter 用于此实现。

如何使用 Spring SwitchUserFilter Filter 实现模拟用户以及它是如何工作的? 冒充用户的内部流程是怎样的?

在我的应用程序中,我也使用 spring security。

任何人都可以帮我提供简单的描述或任何示例来实现此目的吗?

最佳答案

您首先需要创建一个 SwitchUserFilter 实例,如下所示:

@Bean
public SwitchUserFilter switchUserFilter() {
    SwitchUserFilter filter = new SwitchUserFilter();
    filter.setUserDetailsService(userDetailsService);
    filter.setSuccessHandler(authenticationSuccessHandler);
    filter.setFailureHandler(authenticationFailureHandler());
    return filter;
}

然后,您可以这样添加过滤器:

@Override
protected void configure(HttpSecurity http) throws Exception {

    http
     ...
     .addFilterAfter(switchUserFilter(), FilterSecurityInterceptor.class);

现在,要切换,您可以使用

POST /login/impersonate?username=loginIdOfTheNewUser

并切换回来

POST /logout/impersonate

请注意,您的工作是确保现有用户必须拥有足够的切换权限。常见的做法是将 /login/impersonate 仅限制为管理员,并将 /logout/impersonate 限制为经过身份验证的用户,如下所示:

        .authorizeRequests()
            .antMatchers("/login/impersonate*").hasRole("ADMIN")
            .antMatchers("/logout/impersonate*").authenticated()
            .antMatchers("/**").permitAll();

参见this获取完整示例。

关于spring-mvc - 如何在Spring中使用SwitchUserFilter模拟用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377125/

相关文章:

java - 如何在Spring Security中忽略请求参数

java - maxUploadsize 和 maxInMemorySize 之间的区别

java - 如何在 spring 中创建一个后台任务来持续监听 TCP socket 上的数据

java - 如何在同一个 tomcat 服务器上运行基于 angular2 和 spring mvc 的 rest api?

c# - 使用 Windows 身份验证的 NHibernate 模拟

C# Directory.exist 在本地网络上总是返回 false

.net - "Unknown error (0x80005000)"尝试使用 DirectoryEntry 和模拟读取远程 IIS 6 配置数据库 (C#)

json - @JsonTypeInfo 可以与集合一起使用吗?

javascript - 使用 Spring Security 在 HTML 中登录后重定向到主页

spring - 如何有单独的身份验证源? (一个用于 Oauth2,一个用于基于表单的登录)