SpringSecurity實現(xiàn)踢出指定用戶
更新時間:2025年12月25日 16:30:38 作者:百***5588
文章介紹了如何在SpringSecurity中使用SessionRegistryImpl來獲取會話信息并踢出指定用戶,同時也分享了SpringSecurity配置控制器的個人經驗
SpringSecurity踢出指定用戶
SpringSecurity中可以使用 SessionRegistry 的實現(xiàn)類 SessionRegistryImpl 來獲取session相關信息,可以通過這個實現(xiàn)類來踢出用戶。
SpringSecurity配置
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
ISysUserService userService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/webjars/**","/asserts/**","/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/loginPost")
.failureUrl("/login?error=true")
.defaultSuccessUrl("/index")
.and()
.logout()
.logoutUrl("/logout")
.addLogoutHandler(new MyLogoutHandler())
.logoutSuccessUrl("/login")
.and()
.rememberMe()
.userDetailsService(userService)
.tokenRepository(jdbcTokenRepository())
//保存登錄狀態(tài)時間,單位是秒
.tokenValiditySeconds(60*60*3)
.and()
//關閉請求頭中的frame選項,不限制iframe
.headers().frameOptions().disable()
//關閉跨域
.and().csrf().disable()
.sessionManagement()
//無效session跳轉
.invalidSessionUrl("/login")
//同時登陸多個只保留一個
.maximumSessions(1)
//過期session跳轉
.expiredUrl("/login")
.sessionRegistry(sessionRegistry());
}
/** 注冊SessionRegistry*/
@Bean
public SessionRegistry sessionRegistry(){
return new SessionRegistryImpl();
}
控制器
/** 踢出用戶 */
@PreAuthorize("hasRole('管理員')")
@GetMapping("/logout/{id}")
@ResponseBody
public String logout(@PathVariable Long id) throws NoSuchFieldException {
//通過id查詢用戶
SysUser sysUser = userService.selectUserByUserId(id);
//獲取所有principal信息
List<Object> allPrincipals = sessionRegistry.getAllPrincipals();
for (Object allPrincipal : allPrincipals) {
User user=(User)allPrincipal;
//判斷是否跟傳遞的id所找到的用戶登錄名一致
if(user.getUsername().equals(sysUser.getLoginName())){
List<SessionInformation> allSessions = sessionRegistry.getAllSessions(allPrincipal, false);
for (SessionInformation session : allSessions) {
//使當前session過期
session.expireNow();
}
}
}
return "ok";
}
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring Mvc下實現(xiàn)以文件流方式下載文件的方法示例
這篇文章主要介紹了Spring Mvc下實現(xiàn)以文件流方式下載文件的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05
搭建Spring cloud 非阻塞式微服務架構的實現(xiàn)
本文介紹搭建非阻塞式微服務架構,采用Spring Gateway、Spring Security、JWT與Redis,集成EurekaServer、Auth-service、User-service等服務,實現(xiàn)用戶認證、日志跟蹤及統(tǒng)一入口管理,感興趣的可以了解一下2025-08-08
Kotlin?標準函數(shù)和靜態(tài)方法示例詳解
這篇文章主要為大家介紹了Kotlin?標準函數(shù)和靜態(tài)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
解決mybatis一對多查詢resultMap只返回了一條記錄問題
小編接到領導一個任務需求,需要用到使用resultMap相關知識,在這小編記錄下這個問題的解決方法,對mybatis一對多查詢resultMap項目知識感興趣的朋友一起看看吧2021-11-11

