V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhangmengyu
V2EX  ›  Java

springboot 权限控制

  •  
  •   zhangmengyu · 2018-11-14 15:34:44 +08:00 · 5203 次点击
    这是一个创建于 2208 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    17 条回复    2018-11-15 10:47:05 +08:00
    jx99
        1
    jx99  
       2018-11-14 15:40:51 +08:00
    我用 spring security,据说跟 Shiro 对比,security 会稍微复杂一点,不过我没用过 Shiro 不知道到底对比如何。这方面应该网上有很多技术选型的分析博文。
    Bryan0Z
        2
    Bryan0Z  
       2018-11-14 15:42:26 +08:00 via Android
    spring security +1
    有点复杂…
    youngxhui
        3
    youngxhui  
       2018-11-14 15:44:03 +08:00 via Android
    没用过 shiro,spring security 感觉还好
    godoway
        4
    godoway  
       2018-11-14 15:46:30 +08:00
    配过 shiro,一头雾水
    最后还是用 security 了,security 的配置挺舒服的。
    zgcwkj
        5
    zgcwkj  
       2018-11-14 15:48:25 +08:00
    我在学习 SpringBoot 呢!好不清楚这些怎么控制
    xiaoxinshiwo
        6
    xiaoxinshiwo  
       2018-11-14 16:28:13 +08:00
    shiro 简单点
    spring security 稍显复杂
    Mrbird
        7
    Mrbird  
       2018-11-14 16:54:00 +08:00
    idamien
        8
    idamien  
       2018-11-14 17:02:49 +08:00
    Spring Security 剩下的就是老路子 配置配置配置问题!
    TommyLemon
        9
    TommyLemon  
       2018-11-14 17:15:17 +08:00   ❤️ 1
    自动化的权限控制了解下,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
        10
    lj3lj3  
       2018-11-14 17:34:58 +08:00
    我觉得 Shiro 配置也不简单😂 没有使用过 Spring Security 无法对比
    iyangyuan
        11
    iyangyuan  
       2018-11-14 18:05:40 +08:00 via iPhone
    https://github.com/iyangyuan/security
    自写自用,完全基于注解,用 redis 做分 session 布式存储
    vjnjc
        12
    vjnjc  
       2018-11-14 18:11:43 +08:00
    肯定 spring 官方的啊 spring security
    mmdsun
        13
    mmdsun  
       2018-11-14 19:39:08 +08:00 via Android
    自己写拦截器最简单。或者 shiro。spring security 有些复杂
    wolfie
        14
    wolfie  
       2018-11-14 19:45:32 +08:00
    看过 shiro 视频,每个方法上加授权注解就行。
    jakes
        15
    jakes  
       2018-11-14 20:02:48 +08:00 via iPhone
    用的 shiro,很简单
    xuanbg
        16
    xuanbg  
       2018-11-14 21:19:44 +08:00
    自己实现的一套基于 Token 的权限体系,核心代码也就几百行。发放给用户的 Token 很简单,就是一个 Base64 编码的字符串,也就几十个字符。对应的令牌数据比较复杂,是存在 Redis 上的。因为鉴权所需的数据都在 Redis 上,所以鉴权可以很方便地统一在网关上实现,而且基本上不会因鉴权造成延时。
    flzyup
        17
    flzyup  
       2018-11-15 10:47:05 +08:00
    刚实现了一个:shiro + jwt token shiro 比较轻量 简单易懂 security 比较全 相对比较复杂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2471 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:55 · PVG 23:55 · LAX 07:55 · JFK 10:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.