SpringSecurity實(shí)現(xiàn)踢出指定用戶的示例
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";
}到此這篇關(guān)于SpringSecurity踢出指定用戶的文章就介紹到這了,更多相關(guān)SpringSecurity踢出指定用戶內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
alibaba?seata服務(wù)端具體實(shí)現(xiàn)
seata是來處理分布式服務(wù)之間互相調(diào)用的事務(wù)問題,本文重點(diǎn)給大家介紹alibaba-seata實(shí)現(xiàn)方法,文中通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Spring Boot讀取resources目錄文件方法詳解
這篇文章主要介紹了Spring Boot讀取resources目錄文件方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
SpringBoot應(yīng)用啟動(dòng)慢的原因分析及優(yōu)化方法
在使用Spring Boot進(jìn)行開發(fā)時(shí),快速啟動(dòng)應(yīng)用程序是一個(gè)非常重要的需求,然而,在某些情況下,我們會(huì)遇到Spring Boot應(yīng)用啟動(dòng)緩慢的問題,本文將分析Spring Boot應(yīng)用啟動(dòng)慢的常見原因,并提供一些優(yōu)化方法,需要的朋友可以參考下2024-08-08
Java關(guān)鍵字volatile知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于Java關(guān)鍵字volatile知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-01-01
SpringBoot導(dǎo)出PDF的四種實(shí)現(xiàn)方法詳解
在Spring?Boot應(yīng)用程序中實(shí)現(xiàn)PDF導(dǎo)出功能,可以選擇多種庫和技術(shù)棧,本文為大家整理了四種常見的方法,感興趣的小伙伴可以參考一下2025-02-02
關(guān)于SpringBoot的spring.factories文件詳細(xì)說明
spring.factories 文件是 Spring Boot 自動(dòng)配置機(jī)制的核心部分之一,它位于每個(gè) Spring Boot 自動(dòng)配置模塊的 META-INF 目錄下,經(jīng)常看到 spring.factories 文件,卻沒有對(duì)它進(jìn)行深入的了解和分析,今天我們就一起揭開面紗看看它的內(nèi)在,需要的朋友可以參考下2024-12-12

