如何用Spring Boot整合Shiro+JWT?這里教大家一最最簡單的方式


簡介

目前 RESTful 大多都采用 JWT 來做授權校驗,在 Spring Boot 中可以采用 Shiro 和 JWT 來做簡單的權限以及認證驗證,在和 Spring Boot 集成的過程中碰到了不少坑。便結合自身以及大家的常用的運用場景開發出了這個最簡單的整合方式 fastdep-shiro-jwt

這里還要注意:光理論是不夠的,在此送大家十套2020最新Java架構實戰教程+大廠面試題庫,進我扣裙 :七吧傘吧零而衣零傘 (數字的諧音)轉換下可以找到了,里面很多新JAVA架構項目教程,還可以跟老司機交流討教! 

源碼地址

希望大家可以 star 支持一下,后續還會加入其它依賴的簡易整合。
https://github.com/louislivi/fastdep

 

引入依賴

  • Maven
    <dependency> <groupId>com.louislivi.fastdep</groupId> <artifactId>fastdep-shiro-jwt</artifactId> <version>1.0.2</version> </dependency>
  • Gradle
    compile group: 'com.louislivi.fastdep', name: 'fastdep-redis', version: '1.0.2'
 

配置文件

  • application.yml

    fastdep:
    shiro-jwt:
      filter: #shiro過濾規則
        admin:
          path: /admin/**
          role: jwt # jwt為需要進行token校驗
        front:
          path: /front/**/**
          role: anon # anon為無需校驗
      secret: "6Dx8SIuaHXJYnpsG18SSpjPs50lZcT52" # jwt秘鑰
    # expireTime: 7200000 # token有效期 # prefix: "Bearer " # token校驗時的前綴 # signPrefix: "Bearer " # token生成簽名的前綴 # header: "Authorization" # token校驗時的header頭 # 以下對應為shiro配置參數,無特殊需求無需配置 # loginUrl: # successUrl: # unauthorizedUrl: # filterChainDefinitions: 
  • 用戶權限配置類

    @Component public class FastDepShiroJwtConfig extends FastDepShiroJwtAuthorization { @Autowired private UserRequestDataMapper userRequestDataMapper; @Override public SimpleAuthorizationInfo getAuthorizationInfo(String userId) { // 查詢該用戶下的所有權限(當前為示例僅查詢用戶ID真實環境替換為用戶的權限值) Set<String> collect = userRequestDataMapper.selectOptions().stream().map(u -> u.getUserId().toString()).collect(Collectors.toSet()); SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo(); System.out.println(collect); // 當前值為 [1] // 添加用戶權限到SimpleAuthorizationInfo中 simpleAuthorizationInfo.addStringPermissions(collect); return simpleAuthorizationInfo; } }
 

運用

@RestController public class TestController { @Autowired private JwtUtil jwtUtil; /** * 當前為示例所以直接返回了token,真實環境為校驗登錄信息后再返回token即可 * @author : louislivi */ @GetMapping("front/login") public String login() { // ...校驗登錄信息是否正確 // 傳入用戶唯一標示 return jwtUtil.sign("1"); } /** * 當前為示例所以權限寫的是用戶ID 真實環境替換為權限key * @author : louislivi */ @GetMapping("admin") @RequiresPermissions("1") public String jwt() { return "ok!"; } }
 

測試

1. 獲取 token

front-login.png
 

 

2. 測試權限校驗

  • 帶 token

    hasToken.png
     

     

  • 不帶 token

    { "msg": "Access denied !", "code": 401 }
    • 帶上 token 但是,SimpleAuthorizationInfo 中無指定權限
      { "msg": "Subject does not have permission [1]", "code": 403 }

      擴展

有時候需要自定義權限校驗以及錯誤返回信息結構等,這時候就需要重寫 FastDepShiroJwtAuthorization 類中的方法。更多詳情請看這里

 

原理

使用 ImportBeanDefinitionRegistrar BeanDefinitionBuilder.genericBeanDefinition 動態注入 Bean 其實很簡單有興趣可以去看看源碼,這樣的依賴集成是不是簡單了很多呢?

希望大家能夠支持開源,給個小星星,后續還會繼續開發其他依賴的整合,甚至兼容其他框架使用。fastdep 讓 java 整合依賴更簡單。在此也招募有志同道合的 coder 共同完善這個項目。
最后注意:光理論是不夠的,在此送大家十套2020最新Java架構實戰教程+大廠面試題庫,進我扣裙 :七吧傘吧零而衣零傘 (數字的諧音)轉換下可以找到了,里面很多新JAVA架構項目教程,還可以跟老司機交流討教! 
本文的文字及圖片來源於網絡加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM