1. 程式人生 > >shiro安全框架筆記

shiro安全框架筆記

只是進行許可權管理和登入認證的筆記,

直接入正題,shiro使用首先需要先將自己交給spring管理,並且需要在web.xml檔案中配置過濾器


DelegatingFilterProxy是在org.springframework.web.filter下,說明該類是spring包下的類,通過繼承GenericFilterBean類間接的實現了javax.servlet.Filter介面.servlet容器在啟動時候,首先呼叫Filter的init方法.而targetFilterLifecycle的預設值是false,這個屬性的作用是GenericFilterBean類留給子類擴充套件用的,false的話spring無法使用init()和destroy()方法。所以這個屬性必須新增的時候手動更改為true;

該過濾器就是使用來歷模式把容器中的filter與spring的bean關聯起來;

交給spring管理之後,spring的xml檔案中需要為之配置bean(萬物皆bean);

注意的就是配置spring的時候需要代理方式改為動態代理的方法,不過這些通常不需要進行更改.屬於固定配置,使用者需要配置的是realm並將之交給安全管理器,使用許可權管理器的時候將安全管理器引入即可,一般密碼都是加密的密文.使用者輸入的明文在進行校驗的時候需要轉化成相應的密文,所以加密演算法必不可少.需要將之配置到realm中,這樣才能與資料庫進行準確的互動

作為安全框架.當用戶驗證失敗的時候必須要給返回一個指定的頁面.所以需要配置一個過濾器,當用於驗證失敗的時候返回,一般是登入頁面.同時過濾器同樣需要將之交給安全管理器來管理


以上就是配置的內容.配置完成之後還需要手寫realm的類(id=AuthRealm)的類

進行密碼驗證的時候.就是使用AuthenticationToken(令牌:大王叫我來巡山小鑽風手中的代表身份的令牌),令牌中是用於登入時候輸入的使用者名稱和密碼,返回的AuthenticationInfo就是驗證之後的資訊




內部通過AuthenticationToken進行傳遞,但是底層依舊是一個UsernamePasswordToken的物件。驗證和加密措施分開寫是為了程式碼的靈活性,當加密方法改變只需要專注加密的板塊就好了,或者在配置檔案中將加密的bean的class改變即可。提高程式碼複用和靈活性;

最後登入板塊完成。(賬號密碼為空會在剛接受url中進行校驗)如果登入失敗會返回xml中指定的頁面,登入成功shiro內部有sessionmanager。登入成功之後web容器中有存在相應的session,所以登入成功之後就攔截就接觸了

最後進行許可權驗證


shiro對外訪問就是通過subject來互動的,登入成功後才會有使用者的許可權資訊,通過從

得到使用者只需要使用getPrincipal()就可,通過使用者的id可以通過多表聯查查詢到使用者的角色(職位)最終查詢到使用者的許可權資訊

許可權資訊就得到了,最後顯示.使用shiro的標籤通過驗證就完成了