Spring Boot 最簡單整合Shiro+JWT方式

簡介

目前RESTful大多都採用JWT來作受權校驗,在Spring Boot 中能夠採用ShiroJWT來作簡單的權限以及認證驗證,在和Spring Boot集成的過程當中碰到了很多坑。便結合自身以及你們的經常使用的運用場景開發出了這個最簡單的整合方式fastdep-shiro-jwthtml

源碼地址

但願你們能夠star支持一下,後續還會加入其它依賴的簡易整合。 https://github.com/louislivi/fastdepjava

引入依賴

  • 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.ymlgit

    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:
  • 用戶權限配置類github

    @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.pngredis

2.測試權限校驗json

  • 帶token hasToken.pngapp

  • 不帶token框架

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

擴展ide

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

原理

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

但願你們可以支持開源,給個小星星,後續還會繼續開發其餘依賴的整合,甚至兼容其餘框架使用。fastdepjava整合依賴更簡單。在此也招募有志同道合的coder共同完善這個項目。

原文出處:https://www.cnblogs.com/muzishanhe/p/12015410.html

相關文章
相關標籤/搜索