最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Security 強(qiáng)制退出指定用戶的方法

 更新時間:2018年03月09日 11:46:14   作者:Anoyi  
本篇文章主要介紹了Spring Security 強(qiáng)制退出指定用戶的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

應(yīng)用場景

最近社區(qū)總有人發(fā)文章帶上小廣告,嚴(yán)重影響社區(qū)氛圍,好氣!對于這種類型的用戶,就該永久拉黑!

社區(qū)的安全框架使用了 spring-security 和 spring-session,登錄狀態(tài) 30 天有效,session 信息是存在 redis 中,如何優(yōu)雅地處理這些不老實的用戶呢?

首先,簡單劃分下用戶的權(quán)限:

  1. 管理員(ROLE_MANAGER):基本操作 + 管理操作
  2. 普通用戶(ROLE_USER):基本操作
  3. 拉黑用戶(ROLE_BLACK):不允許登錄

然后,拉黑指定用戶(ROLE_USER -> ROLE_BLACK),再強(qiáng)制該用戶退出即可(刪除該用戶在 redis 中 session 信息)。

項目相關(guān)依賴及配置

Maven 依賴

    <!-- 安全 Security -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <!-- Redis -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    <!-- Spring Session Redis -->
    <dependency>
      <groupId>org.springframework.session</groupId>
      <artifactId>spring-session-data-redis</artifactId>
    </dependency>

Spring Session 策略配置 application.yml

# 此處省略 redis 連接相關(guān)配置
spring:
 session:
  store-type: redis

Spring Security 配置代碼示例

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/user/**").authenticated()
        .antMatchers("/manager/**").hasAnyRole(RoleEnum.MANAGER.getMessage())
        .anyRequest().permitAll()
        .and().formLogin().loginPage("/login").permitAll()
        .and().logout().permitAll()
        .and().csrf().disable();
  }

}

強(qiáng)制退出指定給用戶接口

import com.spring4all.bean.ResponseBean;
import com.spring4all.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.session.FindByIndexNameSessionRepository;
import org.springframework.session.Session;
import org.springframework.session.data.redis.RedisOperationsSessionRepository;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
@AllArgsConstructor
public class UserManageApi {

  private final FindByIndexNameSessionRepository<? extends Session> sessionRepository;

  private final RedisOperationsSessionRepository redisOperationsSessionRepository;

  private final UserService userService;

  /**
   * 管理指定用戶退出登錄
   * @param userId 用戶ID
   * @return 用戶 Session 信息
   */
  @PreAuthorize("hasRole('MANAGER')")
  @GetMapping("/manager/logout/{userId}")
  public ResponseBean data(@PathVariable() Long userId){
    // 查詢 PrincipalNameIndexName(Redis 用戶信息的 key),結(jié)合自身業(yè)務(wù)邏輯來實現(xiàn)
    String indexName = userService.getPrincipalNameIndexName(userId);
    // 查詢用戶的 Session 信息,返回值 key 為 sessionId
    Map<String, ? extends Session> userSessions = sessionRepository.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, indexName);
    // 移除用戶的 session 信息
    List<String> sessionIds = new ArrayList<>(userSessions.keySet());
    for (String session : sessionIds) {
      redisOperationsSessionRepository.deleteById(session);
    }
    return ResponseBean.success(userSessions);
  }
}

說明 indexName 為 Principal.getName() 的返回值。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 分享Java開發(fā)必須掌握的日志分析命令

    分享Java開發(fā)必須掌握的日志分析命令

    這篇文章主要介紹了分享Java開發(fā)必須掌握的日志分析命令,在日常工作中,如果我們遇到線上問題,一般的處理步驟應(yīng)該是先保留現(xiàn)場,然后再考慮回滾,之后再是解決問題
    2019-07-07
  • Java實現(xiàn)創(chuàng)建Zip壓縮包并寫入文件

    Java實現(xiàn)創(chuàng)建Zip壓縮包并寫入文件

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)創(chuàng)建Zip壓縮包并寫入文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java 知識難點之異常的認(rèn)知與使用詳解

    Java 知識難點之異常的認(rèn)知與使用詳解

    所謂異常是指程序在運行時出現(xiàn)錯誤時提示調(diào)用者的機(jī)制,異常的種類有很多,不同種類的異常有不同的含義,也有不同的處理方式,通讀本篇對大家的學(xué)習(xí)或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot項目如何將Bean注入到普通類中

    SpringBoot項目如何將Bean注入到普通類中

    這篇文章主要介紹了SpringBoot項目如何將Bean注入到普通類中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java錯誤問題:找不到或無法加載主類的解決

    Java錯誤問題:找不到或無法加載主類的解決

    這篇文章主要介紹了Java錯誤問題:找不到或無法加載主類的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringBoot JPA實現(xiàn)查詢多值

    SpringBoot JPA實現(xiàn)查詢多值

    這篇文章主要為大家詳細(xì)介紹了SpringBoot JPA實現(xiàn)查詢多值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Spring WebFlux使用函數(shù)式編程模型構(gòu)建異步非阻塞服務(wù)

    Spring WebFlux使用函數(shù)式編程模型構(gòu)建異步非阻塞服務(wù)

    這篇文章主要介紹了Spring WebFlux使用函數(shù)式編程模型構(gòu)建異步非阻塞服務(wù),重點介紹如何使用函數(shù)式編程模型創(chuàng)建響應(yīng)式 RESTful 服務(wù),這種編程模型與傳統(tǒng)的基于 Spring MVC 構(gòu)建 RESTful 服務(wù)的方法有較大差別,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • java設(shè)計模式之適配器模式

    java設(shè)計模式之適配器模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式之適配器模式,介紹了什么是適配器模式,適配器模式的種類,感興趣的小伙伴們可以參考一下
    2016-08-08
  • springcloud?整合?openfeign的方法

    springcloud?整合?openfeign的方法

    openFeign 是springcloud對Feign進(jìn)行了增強(qiáng),使得Feign支持了springmvc的注解,并整合了Ribbon和Eureka,從而讓Feign的使用更加方便,這篇文章主要介紹了springcloud?整合?openfeign,需要的朋友可以參考下
    2022-09-09
  • Comet框架Plushlet使用問題解決方案

    Comet框架Plushlet使用問題解決方案

    這篇文章主要介紹了Comet框架Plushlet使用問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10

最新評論

英吉沙县| 蒲江县| 双鸭山市| 合水县| 同仁县| 中西区| 宜君县| 五华县| 罗山县| 甘南县| 玉溪市| 大庆市| 祥云县| 诏安县| 朔州市| 贵港市| 浙江省| 鸡泽县| 佛山市| 渭源县| 永济市| 平邑县| 瑞丽市| 平顺县| 盐亭县| 铁岭县| 泉州市| 措美县| 青海省| 沅陵县| 蒙山县| 白河县| 特克斯县| 赤城县| 滨海县| 遂川县| 沾益县| 南涧| 永泰县| 广昌县| 凉城县|