如何在Spring中使用SwitchUserFilter模仿用户?

时间:2015-07-13 06:57:13

标签: spring-mvc spring-security impersonation magnolia

我对Spring模拟用户没有任何了解。

我已经通过一些示例代码来模拟用户,并注意到SwitchUserFilter用于此实现。

如何使用Spring SwitchUserFilter Filter实现模拟用户,它是如何工作的? 冒充用户的内部流程是什么?

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

任何人都可以通过简单的描述或任何示例来帮助我实现这一目标吗?

1 个答案:

答案 0 :(得分:19)

首先需要创建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);

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

GET /login/impersonate?username=loginIdOfTheNewUser

并切换回来

GET /logout/impersonate

请注意,确保现有用户必须拥有足够的交换机权限是您的职责。通常的做法可能是仅将/login/impersonate限制为ADMIN,并将/logout/impersonate限制为经过身份验证的用户,如下所示:

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

有关完整示例,请参阅this