2017-09-07 101 views
1

我在我的系統中兩個角色:用戶管理如何通過登錄註銷用戶(不是當前)?

管理員可以通過名字登出任何用戶

我該怎麼做? 我需要的是這樣的:

service.logoutUser(anotherUserName)

的配置是這樣的:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .antMatchers 
       .... 
       .formLogin() 
       .loginProcessingUrl("/api/login") 
       .successHandler(authenticationSuccessHandler) 
       .failureHandler(new SimpleUrlAuthenticationFailureHandler()) 
       .and() 
      .rememberMe() 
       .key("...") 
       .rememberMeCookieName("...") 
       .userDetailsService(userDetailsService) 
       .and() 
      .csrf() 
       .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) 
       .and() 
      .logout() 
       .deleteCookies("JSESSIONID") 
       .logoutUrl("/logout") 
       .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler()) 
       .permitAll(); 

回答

2

事情是這樣的:

import org.springframework.security.core.userdetails.User; 
... 
... 
Set<SimpleGrantedAuthority> userRoles = new HashSet<>(); 
userRoles.add(new SimpleGrantedAuthority("ROLE_USER")); 
User user = new User(anotherUserName, "", userRoles); 
List<SessionInformation> sessions = sessionRegistry.getAllSessions(u, false); 

for(SessionInformation info : infos) { 
    info.expireNow(); 
} 
+0

你能澄清爲什麼要使用空字符串代替密碼? – gstackoverflow

+0

我想你可能會知道https://stackoverflow.com/questions/46101537/use-sessionregistry-without-session-count-limit-for-user – gstackoverflow

+0

你不需要密碼,你正在嘗試做什麼。此外,您的代碼不需要知道用戶密碼。密碼只能由用戶編寫並加密。 – mario

相關問題