zoukankan      html  css  js  c++  java
  • jwt token and shiro

    openapi可以完全开放访问,也可以使用jwt token进行简单的认证,还可以使用shiro支持更细致的权限管理。

    handler.yml配置了security和shiro两个handler:

    security:校验请求头Authorization是否符合jwt token规范,是否超时过期等

    shiro:校验jwt token里面的user_id用户,是否有权限访问某个接口

    获取jwt token有两个接口:

    1. /service/layui/login,adminLayuiHandler,登录时会同时校验验证码和用户密码
      用于前后端分离时的登录页面,登录成功之后即可从响应中获取token值
    2. /openapi/token,swagger,Example有一个长期可用的token值(生产上已更换私钥所以此token无效)
      配置了JwtMockHandler响应token,仅用于测试

    生产时禁用示例token:生成私有的server.keystore、server.crt即可,可以参考sh start.sh keystore命令

    shiro授权收到了shiro.ini配置的启发,由于这里使用了无状态、无会话的认证,因此登录时没有使用shiro,也没有引入RBAC相关表结构

    mvn test –Dtest=com.xlongwei.light4j.RedisTest#shiro,提供了示例的权限控制:

    shiro.users={admin=123456,admin, steve=123456,admin}

    shiro.roles={admin=*:*:*}

    shiro.urls={/openapi/upload*/**=roles["admin,user",admin],perms[openapi:upload:*,"service:upload:upload,delete"]}

    使用了redis的map数据结构,支持用户admin、steve登录,支持灵活配置用户、角色、权限并即时生效(比shiro.ini更灵活方便)

    roles["admin,user",admin]:(admin and user) or admin,用户admin不满足admin and user,但是满足or admin,因此鉴权通过

    perms[openapi:upload:*,"service:upload:upload,delete"]:用户admin为超级权限*:*:*,后面这个权限需要双引号避免被逗号分隔造成歧义

    MyJwtShiroHandler直接使用token登录shiro,自定义了JwtAuthenticationToken、JwtAuthenticationRealm,通过token获得userId,再获取roles、perms

    checkUrls方法检查了当前用户是否有权限访问当前请求路径。

  • 相关阅读:
    js面向对象的程序设计 --- 上篇(理解对象)
    js基础 之 引用类型
    js基础之--变量 作用域和内存问题
    js基础心得
    一些转载的知识点
    linux打印指定的行的内容
    R画柱形图和箱线图
    Meerkat软件
    bam文件格式说明
    STAR软件的学习
  • 原文地址:https://www.cnblogs.com/xingqi/p/11436085.html
Copyright © 2011-2022 走看看