8.11.15 下午 第80天上課
總結
shiro : 一個主流的許可權管理框架 Apache
shiro :
認證:Authenticator 認證器
主體:subject 登入者
建立一個SimpleAuthenticationInfo物件 存放 使用者名稱 資料庫密碼 鹽
授權:
一個是角色 role
一個是許可權 permission
從資料庫中取出使用者對應的 角色許可權資訊 存放到
SimpleAuthorizationInfo 物件中
加密原則
使用md5加密方式進行對密碼加密 加密不可逆 比對方式 將使用者輸入的密碼加鹽加密在和資料庫中加密後的密碼進行對比
會話管理
sessionManager
快取管理
cacheManager
驗證碼:需要繼承FormAuthenticationFilter重寫方法中實現在 認證之前判斷驗證碼是否正確
記住我:cookieManager 把使用者名稱和密碼存放在cookie中 下次登入判斷cookie中是否存在,如果已經存在則直接發給後臺進行登入
過濾器配置:
authc: 必須認證
anon: 匿名訪問
user: 認證過
logout: 退出登入
jsp:shiro標籤
<shiro:authenticated/> 登入之後
<shiro:notAuthenticated/> 不在登入狀態時
<shiro:guest/> 使用者在沒有RememberMe時
<shiro:user/> 使用者在RememberMe時
<shiro:hasAnyRoles name="abc,123"/ > 在有abc或者123角色時
<shiro:hasRole name="abc"/> 擁有角色abc
<shiro:lacksRole name="abc"/> 沒有角色abc
<shiro:hasPermission name="abc"/> 擁有許可權資源abc
<shiro:lacksPermission name="abc"/> 沒有abc許可權資源
<shiro:principal/> 顯示使用者身份名稱
<shiro:principal property="username"/> 顯示使用者身份中的屬性
controller 中的shiro註解
@RequiresAuthentication
表示當前Subject已經通過login 進行了身份驗證;即Subject. isAuthenticated()返回true。
@RequiresUser
表示當前Subject已經身份驗證或者通過記住我登入的。
@RequiresGuest
表示當前Subject沒有身份驗證或通過記住我登入過,即是遊客身份。
@RequiresRoles(value={“admin”, “user”}, logical= Logical.AND)
@RequiresRoles(value={“admin”})
@RequiresRoles({“admin“})
表示當前Subject需要角色admin 和user。
@RequiresPermissions (value={“user:a”, “user:b”}, logical= Logical.OR)
表示當前Subject需要許可權user:a或user:b。