我对Spring模拟用户没有任何了解。
我已经通过一些示例代码来模拟用户,并注意到SwitchUserFilter用于此实现。
如何使用Spring SwitchUserFilter Filter实现模拟用户,它是如何工作的? 冒充用户的内部流程是什么?
在我的应用程序中,我也使用spring security。
任何人都可以通过简单的描述或任何示例来帮助我实现这一目标吗?
答案 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。