您首先需要創建的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
只有管理員,並和/logout/impersonate
到身份驗證的用戶,就像這樣:
.authorizeRequests()
.antMatchers("/login/impersonate*").hasRole("ADMIN")
.antMatchers("/logout/impersonate*").authenticated()
.antMatchers("/**").permitAll();
一個完整的示例,請參見this。