SpringSecurity實(shí)現(xiàn)踢出指定用戶
SpringSecurity踢出指定用戶
SpringSecurity中可以使用 SessionRegistry 的實(shí)現(xiàn)類 SessionRegistryImpl 來獲取session相關(guān)信息,可以通過這個(gè)實(shí)現(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)時(shí)間,單位是秒
.tokenValiditySeconds(60*60*3)
.and()
//關(guān)閉請(qǐng)求頭中的frame選項(xiàng),不限制iframe
.headers().frameOptions().disable()
//關(guān)閉跨域
.and().csrf().disable()
.sessionManagement()
//無效session跳轉(zhuǎn)
.invalidSessionUrl("/login")
//同時(shí)登陸多個(gè)只保留一個(gè)
.maximumSessions(1)
//過期session跳轉(zhuǎn)
.expiredUrl("/login")
.sessionRegistry(sessionRegistry());
}
/** 注冊(cè)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) {
//使當(dāng)前session過期
session.expireNow();
}
}
}
return "ok";
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringSecurity顯示用戶賬號(hào)已被鎖定的原因及解決方案
- SpringBoot3整合SpringSecurity6添加用戶、密碼加密的方式
- 基于數(shù)據(jù)庫(kù)的用戶認(rèn)證實(shí)現(xiàn)SpringBoot3整合SpringSecurity6的過程
- SpringSecurity獲取當(dāng)前登錄用戶的信息的幾種方法實(shí)現(xiàn)
- SpringSecurity實(shí)現(xiàn)踢出指定用戶的示例
- SpringSecurity實(shí)現(xiàn)自定義用戶認(rèn)證方案
- springsecurity實(shí)現(xiàn)登錄驗(yàn)證以及根據(jù)用戶身份跳轉(zhuǎn)不同頁面
相關(guān)文章
Spring Mvc下實(shí)現(xiàn)以文件流方式下載文件的方法示例
這篇文章主要介紹了Spring Mvc下實(shí)現(xiàn)以文件流方式下載文件的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
搭建Spring cloud 非阻塞式微服務(wù)架構(gòu)的實(shí)現(xiàn)
本文介紹搭建非阻塞式微服務(wù)架構(gòu),采用Spring Gateway、Spring Security、JWT與Redis,集成EurekaServer、Auth-service、User-service等服務(wù),實(shí)現(xiàn)用戶認(rèn)證、日志跟蹤及統(tǒng)一入口管理,感興趣的可以了解一下2025-08-08
Springboot錯(cuò)誤頁面和錯(cuò)誤信息定制操作
這篇文章主要介紹了Springboot錯(cuò)誤頁面和錯(cuò)誤信息定制操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Kotlin?標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法示例詳解
這篇文章主要為大家介紹了Kotlin?標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
解決mybatis一對(duì)多查詢r(jià)esultMap只返回了一條記錄問題
小編接到領(lǐng)導(dǎo)一個(gè)任務(wù)需求,需要用到使用resultMap相關(guān)知識(shí),在這小編記錄下這個(gè)問題的解決方法,對(duì)mybatis一對(duì)多查詢r(jià)esultMap項(xiàng)目知識(shí)感興趣的朋友一起看看吧2021-11-11

