这是一个统一管理系统权限,设计的目标是给开发者一个完整地权限管理系统,以便你能更专注自己系统业务的开发
- 统一配置界面
- 简洁的客户端SDK包
- SDK包支持不同语言系统
- 粒度随意掌控,可大可小
- 易扩展
- 支持spring
下载
tar.gz .zip
安装运行
- 运行之前请先安装maven和git
- 将代码clone到本地后,需要先修改./auth-web/src/man/filters/dev.properties,配置你自己的数据库连接
- 执行sh run.sh,成功启动后访问 http://localhost:8888,如果看到登陆页面,说明程序启动成功
- 关于登陆账号,请继续向下看数据库创建
数据库创建
当程序第一次成功启动后,会自动在你配置的数据库中创建数据表,你需要administrator表添加一对账号和密码 作为你当前的登陆账号,现在一个完整地权限中心已经运行起来了,接下来请看客户端SDK的介绍
客户端开发
加入依赖:
<groupId>com.peaceful</groupId> <artifactId>nuggets-auth-sdk</artifactId> <version>1.0-SNAPSHOT</version>
配置
auth.app.id=1 #客户端在服务中心注册id auth.service.address=http://127.0.0.1:8888 #服务中心地址 auth.user.session.out.time=2 #user info 缓存时间 auth.system.session.out.time=300 #system info 缓存时间 auth.context.impl.class=xxx #实现AuthContext抽象类的路径,这个是可选配置
获得服务
AuthService authService = AuthServiceImpl.getAuthService();
两个主要服务接口
getSystem() 获得客户端在权限中心注册的所有配置信息 getUser(String email) 获得客指定用户的所有配置信息 有了这两个接口你就可以很方便的进行扩展,因为通过这两个接口你拿到的基本上是所有配置信息,此外,不要担心性能问题,因为通过这两个接口拿到的 数据会缓存在客户端的服务器,你也没必要担心缓存数据过时问题,因为客户端会实时监测服务中心数据配置的变化,若有变化,客户端会立即重新加载缓存
客户端与服务中心数据同步原理
当客户端第一次去服务端获取一个用户的权限信息时,SDK包会把拿到的用户权限信息缓存到你自己的服务器,这样可以快速提高你的系统响应速度,同时当权限中心为很多系统提供时 也减少了服务器的压力。所以如果权限中心数据发生改变时,客户端必须更新自己的缓存数据保证数据和服务器同步。为了达到这个目的,权限中心会在服务端和客户端都有一个当前 最新数据的时间戳,可查看VCS类,作为当前数据的版本号.服务端在每次更新数据时都会重新记录当前的时间戳作为服务端的数据版本号。客户端会有一个类似于心跳的动作,每隔2s 去和服务端数据版本号对比,如果客户端的版本号低于服务端,客户端就会把当前的缓存数据清除重新去服务端获取最新数据,然后更新自己的版本号与服务端相同。
扩展
客户端支持jstl表达式
下面是一个样例,会根据客户端系统的当前登录是否在页面渲染menuKey=goods的按钮,按钮的样式是bootstrap3.3版本定义,这需要根据你自己的系统 具体定制,具体样例参照类 MenuUtils
<%@taglib uri="http://com.peacuful.com/auth/menu" prefix="menu" %> <menu:menu menuKey="goods" menuLevel="L1">
客户端支持注解配置
下面是一个样例,会根据客户端系统的当前登录用户决定是否可以请求addMeta controller
@AUTH.Function({"goods,mall"}) @AUTH.Role("admin") @RequestMapping(value = "/item/xxx", method = {RequestMethod.POST}) public void addMeta(HttpServletRequest request, HttpServletResponse response) { ... }