Java 有现成的权限系统框架么?

2020-06-18 20:25:05 +08:00
 tctc4869

之前自己开发 web 项目的时候,关于权限系统的编码,自己从 0 开始编写了一个简易的权限系统,基于 RBAC 的那种,不过还是想看看有没有现成的权限系统设计。

现在的我不太喜欢注解配置,注解侵入太强,想找一套式非侵入式的权限系统框架,权限校验在类似 Web 拦截器之类的地方进行权限校验。各位知道有哪些现成的么,或者有什么思路么

至于是哪个 WebMVC 框架,这里不说明,因为 WebMVC 框架可能使用的是 Spring MVC,也可能是 Vert.x web,也可能是 JFinal,也可能是 Servlet 。所以侵入程度不要太强。尽可能与 WebMVC 的代码解耦。这是一个重点。

权限校验代码不能写在 Controller 类里,所以 shiro 之类通过注解的方式实现权限校验的方式被排除了,如果有 Controller 需要特定的权限校验,那这个交给拦截器之类的组件来进行。

8718 次点击
所在节点    Java
54 条回复
byaiu
2020-06-18 20:44:25 +08:00
shiro 可以吗
beginor
2020-06-18 20:52:24 +08:00
最近也在看 spring 全家桶, 但是似乎没有像 asp.net core identity 同等级别的认证框架,Java 不太熟, 无意引战, 有的话望各路大神告知
tctc4869
2020-06-18 21:04:12 +08:00
@byaiu 这个不行
Sharuru
2020-06-18 21:33:09 +08:00
轻量的比较少,以前用过几个,但是实现不咋地,要 customize 一下很烦。
现在框架流行注解是为了易用,一句话就能解决的东西就不用再像以前 XML 里写茫茫多的代码了;也符合 Spring Boot 的风格。

话说回来,其实几个叫得出名字的验证框架其最终还是利用 Filter 来满足功能的。

比如 Spring Security 就是其中之一,把预制好的,各种各样来源、功能的 Filter 注册到 Web 访问的生命周期中来实现自己的验证链。

翻阅一下 AuthenticationChain 的代码,或者官方文档的 Security Filter Chain 章节,楼主就应该能有思路自己撸一套喜欢的验证框架了。
zifangsky
2020-06-18 21:33:25 +08:00
试试我写的这个权限控制框架?名字叫:easylimit ( https://github.com/zifangsky/easylimit

如果不喜欢注解形式,可以类似下面这样配置:
https://i.loli.net/2020/06/18/TRnWw1o8NJ6Vjl4.jpg
chihiro2014
2020-06-18 21:44:40 +08:00
Spring Security 不香么
sadfQED2
2020-06-18 21:51:07 +08:00
权限系统跟业务耦合太严重了,还是自己写比较好,以后改也好改
tctc4869
2020-06-18 22:25:13 +08:00
@Sharuru
我不喜欢注解配置权限的原因是,注解是硬编码。
tsdbg
2020-06-19 00:40:03 +08:00
Vert.x 如何?直接在 Router 里校验
xuanbg
2020-06-19 02:31:53 +08:00
xuanbg
2020-06-19 02:41:02 +08:00
@sadfQED2 只要有资源管理和资源对应的接口配置,就可以达成完全无耦合的目标。底层原理就是用可配置的约定替代依赖而已,比较形象点的说法就是对暗号,只认暗号不认人。
lihongming
2020-06-19 03:27:59 +08:00
自从用了 AWS Serverless 框架,就再也不写权限系统了,只需规划好路径,Cognito 和 APIGateway 会自动拦截无权访问的。

这种按路径控制权限的思想通用型很好,我觉得应该有现成的框架(可惜我不知道)
yukiloh
2020-06-19 03:35:14 +08:00
@lihongming 是不是通过 lambda 来调用.前段时间想研究的,我是 idea19.1,aws toolkit 版本高了报错,低了还是报错,最后火大了一键卸载
wangxiaoaer
2020-06-19 06:56:52 +08:00
@lihongming 跟由层实现的只能是基本的能不能访问的情况,但如果同一个接口需要根据角色返回不同数据,实现不了吧。
waa
2020-06-19 07:14:26 +08:00
@wangxiaoaer 这种怎么实现
inwar
2020-06-19 07:22:57 +08:00
@wangxiaoaer 路由大粒度,服务小粒度
lihongming
2020-06-19 07:31:52 +08:00
@wangxiaoaer 根据角色返回不同数据就不算“权限”控制的范畴了吧?

这种需求似乎没什么可用的框架,都得自己根据用户的 group id 或者 role id 自己写规则
Hanggi
2020-06-19 08:05:26 +08:00
@wangxiaoaer 你这样不就把角色和其他数据耦合在一起了吗?
jzphx
2020-06-19 08:27:56 +08:00
注解侵入强,属硬编码不能认同。既然都 RBAC 了,菜单角色权限都在 db 或者缓存,可配置性很强。不在 controller 控制权限不科学啊,难道控制的不是菜单权限而是数据权限?放在 service 层对业务侵入肯定强啊
wangyanrui
2020-06-19 08:33:29 +08:00
1. 权限基本高度耦合业务
2. 越轻量越需要自己定制,越重量约可以多组合起来,少定制
2. SpringSecurity 基本满足楼主要求,虚拟出来一个 FIlter 链去做权限校验,只需要导 starter,切换成数据库,配配配即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/682823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX