这是一个统一管理系统权限,设计的目标是给开发者一个完整地权限管理系统,以便你能更专一本身系统业务的开发html
统一配置界面java
简洁的客户端SDK包git
支持不一样平台,不一样语言github
易扩展web
粒度随意掌控,可大可小spring
支持spring数据库
auth sdk 与 auth center 通讯增长秘钥缓存
优化安装过程,系统第一次启动安装时添加超级管理员,没必要在手动添加
修复安装脚本run.sh
新增2.0分支,该分支将会增长更细粒度的权限控制,可让你在方法内部获取更为精细的数据控制,目前正处于开发中
新增QQ交流群:365133362
因为我的精力有限,更新功能还未更新到项目文档,请开发者见谅
这次更新,演示项目example可能会受到影响,请注意
运行以前请先安装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>
#客户端在服务中心注册id #当客户端引入sdk包时,须要如今权限中心->添加系统,注册服务,成功后会为该客户端生成一个惟一id,标识你的系统; auth.app.id=1 # 客户端appkey auth.appkey=1260b2a09f140f4731f19099e1d70f50 # 客户端secret auth.secret=2cf102c4e929fa2476fd0e94f924c08b #权限中心地址 #sdk包与权限中心创建链接,须要知道权限中心的位置 auth.service.address=http://10.10.1.110:8080 #user info 缓存时间 #第一次经过getUser()获取用户权限信息时,会把配置信息缓存在客户端的服务器,以后会在缓存中获取 #若是缓存失效,会再次请求权限中心 auth.user.session.out.time=2 #system info 缓存时间 ,目的同上 auth.system.session.out.time=300 #实现AuthContext抽象类的路径 #这个是可选配置,只有当你引入auth-spring包时才会使用到这个配置, #当服务启动时会实例化指定包路径类的对象,而后sdk将经过AuthContext实例拿取一些必要的上下文信息,好比每次请求用户名是什么 auth.context.impl.class=xxx
AuthService authService = AuthServiceImpl.getAuthService(); #这是经过sdk包与权限中心创建服务的惟一入口,当启动后,sdk会读取auth.properties去服务中心校验是否注册服务 #若是存在注册信息将返回一个可用的服务实例,不然将会抛出未在权限中心注册服务异常
getSystem() 得到客户端在权限中心注册的全部配置信息
getUser(String email) 得到客指定用户的全部配置信息
有了这两个接口你就能够很方便的进行扩展,由于经过这两个接口你拿到的基本上是全部配置信息,此外,不要担忧性能问题,由于经过这两个接口拿到的
数据会缓存在客户端的服务器,你也不必担忧缓存数据过期问题,由于客户端会实时监测服务中心数据配置的变化,如有变化,客户端会当即从新加载缓存
当前sdk的包只发行了java版本,该版本除了依赖Ehcache包为了实现客户端的缓存外,不依赖任何第三方包,因此只要
你当前的开发语言能够和java语言相互调用就可适用于用你的系统,好比当前咱们正把sdk包用与spring编写
的项目和scala编写的项目当中,实际运行中表现很是稳定。但因为各个客户端的或者各个公司平台的差别性,
可能须要你做出一些必要的扩展,目的是保证sdk包能够适用于更多的架构同时也保证大家在基于sdk包进行开发时
能够简单方便的去扩展.当前提供的auth-spring包只是一个扩展的列子,它是适用于spring mvc架构的项目,扩展主要
内容是客户端能够经过springmvc HandlerInterceptorAdapter 拦截用户请求,而后经过检查controller上的注解
决定动做的执行方向,另外,还针对视图是jsp页面的写了一个jstl文件,当页面经过jstl拿取菜单时,会先经过authContext(
这须要客户端本身实现authContext接口)拿到当前用户身份,根据用户身份渲染不一样的菜单
下面是一个样例,会根据客户端系统的当前登陆是否在页面渲染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) { ... }
可参考demo项目 example
QQ群:365133362