這是一個統一管理系統權限,設計的目標是給開發者一個完整地權限管理系統,以便你能更專一本身系統業務的開發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