web應用達到生產須要就必須有安全控制。java web領域常常說起的兩大開源框架主要有兩種選擇
Spring Security和Apache Shiro 。因此學習這兩種框架也是java開發者提升水平的必經之路。從今天開始連續一段時間內,研究一下Spring Security。若是想學習的同窗能夠關注一下公衆號:Felordcn
或者經過https://felord.cn
來及時獲取相關的乾貨。html
相對於Apache Shiro,Spring Security提供了更多的諸如LDAP
、OAuth2.0
、ACL
、Kerberos
、SAML
、SSO
、OpenID
等諸多的安全認證、鑑權協議,能夠按需引用。對認證/鑑權更加靈活,粒度更細。能夠結合你本身的業務場景進行更加合理的定製化開發。在最新的Spring Security 5.x中更是提供了響應式應用(reactive application)提供了安全控制支持。從語言上來說,支持使用kotlin、groovy進行開發。前端
Spring Security由於是利用了Spring IOC 和AOP的特性而沒法脫離Spring獨立存在。而Apache Shiro能夠獨立存在。可是Java Web領域Spring能夠說是事實上的J2EE規範。使用Java技術棧不多能脫離Spring。也由於功能強大Spring Security被認爲很是重,這是不對的。認真學習以後會發現其實也就是那麼回事。兩種框架都是很是優秀的安全框架,根據實際須要作技術選型。若是你要學習這兩種安全框架就必須熟悉一下一些相對專業的概念。java
這兩個概念英文分別爲authentication
/authorization
。是否是特別容易混淆。不管你選擇Apache Shiro 或者 Spring Security 都須要熟悉這兩個概念。其實簡單來講認證(authentication)就是爲了證實你是誰
,好比你輸入帳號密碼證實你是用戶名爲Felordcn
的用戶。而受權(authorization)是經過認證後的用戶所綁定的角色等憑證來證實你能夠作什麼
。打一個現實中的例子。十一長假你們遠行都要乘坐交通工具,如今坐車實名制,也就是說你坐車須要兩件東西:身份證
和車票
。身份證是爲了證實你確實是你,這就是 authentication
;而車票是爲了證實你張三確實買了票能夠上車,這就是 authorization
。這個例子從另外一方面也證實了。若是隻有認證沒有受權,認證就沒有意義。若是沒有認證,受權就沒法賦予真正的可信任的用戶。二者是同時存在的。react
對於servlet web應用來講,想要通用的安全控制最好莫過於使用Servlet Filter
。 過濾器責任鏈(關於責任鏈能夠經過https://www.felord.cn/chainpa... 來了解)來組成一系列的過濾策略,不一樣的條件的請求進入不一樣的過濾器進行各自的處理邏輯。咱們能夠對這些Filter
進行排列組合以知足咱們的實際業務須要。程序員
RBAC 是基於角色的訪問控制(Role-Based Access Control )的簡稱。在 RBAC 中,權限與角色相關聯,用戶經過成爲適當角色的成員而獲得這些角色的權限。這就極大地簡化了權限的管理。這樣管理都是層級相互依賴的,權限賦予給角色,而把角色又賦予用戶,這樣的權限設計很清楚,管理起來很方便。當你擁有某個角色之後,你天然繼承了該角色的全部功能。對你的一些操做限制不須要直接與你進行溝通,只須要操做你擁有的角色。好比你在公司既是一個java程序員又是一個前端程序員,那麼你不但要當sqlboy還要當頁面仔。若是有一天經理說了前端負責測試工做,好了你又承擔了測試任務。web
好比其它一些常見的安全策略、攻擊方式。好比 反向代理、網關、壁壘機這種偏運維的知識;CSRF(Cross-site request forgery)跨站請求僞造 、XSS(跨站腳本攻擊)也須要了解一些。對於一些上面提到的什麼OAuth2.0之類的協議也最好研究一下。固然這些不是必須的。sql
本文粗略的簡述了Spring Security 和Apache Shiro的一些異同。以及學習它們的一些前置條件。若是你不知足這些條件學習起來可能比較吃力。因此本文的做用是爲你學習預熱,作一些準備工做,避免新入門的同窗陷入迷途。也但願你們多多支持,多多關注。安全
關注公衆號:Felordcn 獲取更多資訊
app