春ブーツ史郎+ JWTを統合する最も簡単な方法

簡単な紹介

現在、RESTfulほとんどが使用されているJWTに認可チェックを行うためSpring Bootに使用することができますShiroし、JWT簡単なアクセス許可と認証検証を行い、内とSpring Bootピット統合プロセスの多くに会いました。私たちは、独自の意志と一般的な使用シナリオは、統合する最も簡単な方法を開発しましたfastdep-shiro-jwt

送信元アドレス

私はあなたがどのようなスターは、フォローアップ他の依存を簡単に統合に参加するサポートすることができます願っています。
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!";
    }
}

テスト

入手1token
フロントlogin.png

2.テストの権限チェック

  • 带token
    hasToken.png

  • トークンなし
{
    "msg": "Access denied !",
    "code": 401
}
  • トークンは、しかし、持ってきSimpleAuthorizationInfoていない指定された権限を
{
    "msg": "Subject does not have permission [1]",
    "code": 403
}

スプレッド

時には、書き換える必要性に権限エラーチェックとリターン情報構造、この時間をカスタマイズする必要があるFastDepShiroJwtAuthorizationクラスのメソッドを。詳細については、参照してくださいここに

原則

使用ImportBeanDefinitionRegistrar BeanDefinitionBuilder.genericBeanDefinitionダイナミック注射はBean、そのような統合は、単にそれの多くに依存していない、実際にソースを見て行くことができます興味を持っている非常に単純なのですか?

私は、あなたが小さな星に、オープンソースをサポートすることを願ってフォローアップ他の依存統合、および他のフレームワークとでも互換性を開発していきます。fastdepしてみましょうjava簡単に依存している統合。ここにも同じような考えを持つ募集coderプロジェクトを改善するために一緒に。

おすすめ

転載: www.cnblogs.com/muzishanhe/p/12015410.html