zhangmengyu
V2EX  ›  Java

springboot 权限控制

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