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