zhangmengyu
V2EX  ›  Java

springboot 权限控制

  •  
  •   zhangmengyu · Nov 14, 2018 · 6471 views
    This topic created in 2920 days ago, the information mentioned may be changed or developed.

    springboot 框架,请问大佬都是怎样实现权限控制的?是基于 Shiro 安全框架或者 Spring Security 安全框架或者是其他方式?哪种方式较为轻便?配合 springboot 更适合?

    17 replies  •  2018-11-15 10:47:05 +08:00
    jx99
    jx99
    Nov 14, 2018
    1
    我用 spring security,据说跟 Shiro 对比,security 会稍微复杂一点,不过我没用过 Shiro 不知道到底对比如何。这方面应该网上有很多技术选型的分析博文。
    Bryan0Z
    Bryan0Z
    Nov 14, 2018 via Android
    2
    spring security +1
    有点复杂…
    youngxhui
    youngxhui
    Nov 14, 2018 via Android
    3
    没用过 shiro,spring security 感觉还好
    godoway
    godoway
    Nov 14, 2018
    4
    配过 shiro,一头雾水
    最后还是用 security 了,security 的配置挺舒服的。
    zgcwkj
    zgcwkj
    Nov 14, 2018
    5
    我在学习 SpringBoot 呢!好不清楚这些怎么控制
    xiaoxinshiwo
    xiaoxinshiwo
    Nov 14, 2018
    6
    shiro 简单点
    spring security 稍显复杂
    idamien
    idamien
    Nov 14, 2018
    8
    Spring Security 剩下的就是老路子 配置配置配置问题!
    TommyLemon
    TommyLemon
    Nov 14, 2018❤️1
    9
    自动化的权限控制了解下,3 行代码就可配置每种角色对一张表的增删改查权限。

    我们用 APIJSON 来操作一张表,例如用户表 User,代码写 3 行就够了:

    //注册表并添加权限,用默认配置
    @MethodAccess
    public class User {
    //内容一般仅供表字段说明及 Android App 开发使用,服务端不用的可不写。
    }

    //Verifier 内添加权限
    accessMap.put(User.class.getSimpleName(), getAccessMap(User.class.getAnnotation(MethodAccess.class)));


    然后运行下 Server 工程就可以请求了:

    URL: http://apijson.cn:8080/get

    表单:

    {
    "User": {
    "id": 82001
    }
    }
    返回:

    {
    "User": {
    "id": 82001,
    "sex": 0,
    "name": "Test",
    "tag": "APIJSON User",
    "head": "http://static.oschina.net/uploads/user/19/39085_50.jpg",
    "contactIdList": [
    82004,
    82021,
    70793
    ],
    "pictureList": [
    "http://common.cnblogs.com/images/icon_weibo_24.png"
    ],
    "date": "2017-02-01 19:21:50.0"
    },
    "code": 200,
    "msg": "success"
    }


    或者可以再定制下 POST 请求的角色权限:
    //只允许未登录角色和管理员角色新增 User,默认配置是{UNKNOWN, LOGIN, CONTACT, CIRCLE, OWNER, ADMIN}
    @MethodAccess(
    GET = {LOGIN, CONTACT, CIRCLE, OWNER, ADMIN}
    )
    public class User {}

    再直接像上面那样请求就会报错:
    {
    "User": {
    "id": 82001
    },
    "tag": "User",
    "code": 407,
    "msg": "未登录,请登录后再操作!"
    }
    登录后就和上面一样返回正确的结果。


    不用写代码 APIJSON 3.5K Star 超第 2 大 ORM 库 Hibernate
    https://www.v2ex.com/t/507671#reply7
    lj3lj3
    lj3lj3
    Nov 14, 2018
    10
    我觉得 Shiro 配置也不简单😂 没有使用过 Spring Security 无法对比
    iyangyuan
    iyangyuan
    Nov 14, 2018 via iPhone
    11
    https://github.com/iyangyuan/security
    自写自用,完全基于注解,用 redis 做分 session 布式存储
    vjnjc
    vjnjc
    Nov 14, 2018
    12
    肯定 spring 官方的啊 spring security
    mmdsun
    mmdsun
    Nov 14, 2018 via Android
    13
    自己写拦截器最简单。或者 shiro。spring security 有些复杂
    wolfie
    wolfie
    Nov 14, 2018
    14
    看过 shiro 视频,每个方法上加授权注解就行。
    jakes
    jakes
    Nov 14, 2018 via iPhone
    15
    用的 shiro,很简单
    xuanbg
    xuanbg
    Nov 14, 2018
    16
    自己实现的一套基于 Token 的权限体系,核心代码也就几百行。发放给用户的 Token 很简单,就是一个 Base64 编码的字符串,也就几十个字符。对应的令牌数据比较复杂,是存在 Redis 上的。因为鉴权所需的数据都在 Redis 上,所以鉴权可以很方便地统一在网关上实现,而且基本上不会因鉴权造成延时。
    flzyup
    flzyup
    Nov 15, 2018
    17
    刚实现了一个:shiro + jwt token shiro 比较轻量 简单易懂 security 比较全 相对比较复杂
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2423 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 145ms · UTC 05:00 · PVG 13:00 · LAX 21:00 · JFK 00:00
    ♥ Do have faith in what you're doing.