安全無小事,當我們的Spring-boot應用上線之後,如何做用戶認證以及授權呢?
在Spring的生態中,Spring Security 提供了基於javaEE的企業級安全服務。那麼今天我們就用它來做認證和授權吧。
先上效果,以及附上代碼地址:
https://github.com/onlyonezhongjinhui/spring-boot-security.git
我們這裡設置了兩個用戶(lucifer、admin),分別擁有權限是lucifer:ROLE_USER, admin:ROLE_ADMIN、ROLE_USER。
沒登錄前默認調到登錄頁面
admin用戶登錄後可以訪問所有接口
lucifer用戶登錄後只能訪問部分接口home、foo接口,訪問admin接口會受限
怎麼達到這樣的效果呢?各位看官,抓穩,要開車啦
應用結構
Spring Security的內部註冊了12種過濾器,層層處理,這樣我們可以根據我們的需求定製,如果沒定製的話就使用默認過濾器。這裡就不展開了,大家有興趣的可以調試研究源碼。
Security認證的方式可以多種多樣,自定義認證方式只需要實現AuthenticationProvider接口並註冊到AuthenticationManager中即可。
自定義provider會去調用UserDetailsService的loadUserByUsername方法去加載用戶,一般我們的用戶、權限信息都保存在數據庫,所以這裡就使用Mybatis進行查詢加載用戶、權限信息。
用戶驗證通過後,需要返回用戶、權限信息往下傳遞。這個信息需要封裝在實現了UserDetailsService接口的Bean。
加載用戶、權限信息使用Mybatis很方便
自定義認證失敗處理器,實現AuthenticationFailureHandler接口
自定義無權限訪問處理器,實現AccessDeniedHandler接口
配置Security訪問控制、自定義無權限訪問處理器、自定義認證失敗處理器
數據庫表結構,按照官方的結構建設,當然也可以自定義
Security很完善很強大,單機應用的話這樣的配置已經基本夠用。
今天就分享到這裡把,寫完實在有點累了,要休息了。
閱讀更多 Lucif墮落天使 的文章
關鍵字: 技術