Shiro 的user過濾器

項目裏用到了Shiro這個權限框架,感覺呢,挺方便的。

看了一天多兩天的樣子。然後運行了一些例子,比較容易,後來看到一個過濾器,配置如下

[main]
#默認是/login.jsp
authc.loginUrl=/login
roles.unauthorizedUrl=/unauthorized
perms.unauthorizedUrl=/unauthorized

logout.redirectUrl=/login

[users]
zhang=123,admin
wang=123

[roles]
admin=user:*,menu:*

[urls]
#anon 不要登錄就可以訪問

/logout2=logout
/login=anon
/logout=anon
/unauthorized=anon
/static/**=anon 

#需要登錄才能訪問
#需要登錄,並且有admin角色才能訪問
/role=authc,roles[admin]
/permission=authc,perms["user:create"]
/authenticated=user
#userFilter首先是判斷是不是登錄頁面,如果是的話,就是allowd,如果不是,如果之前登錄過,並且isRememberMe=true。則可訪問,但authc的不能
#
這個裏面有個user過濾器的不太懂,但是你懂了,就感覺很容易了

user代表的是UserFilter

 if (isLoginRequest(request, response)) {
            return true;
        } else {
            Subject subject = getSubject(request, response);
            // If principal is not null, then the user is known and should be allowed access.
            return subject.getPrincipal() != null;
        }
這是isAccessAllowed方法的源碼。大致意思是,首先如果是訪問的登錄頁面,則允許用戶訪問,如果不是,則從獲得當前用戶,看用戶是否rememberMe了,rememberMe並且在有效期內登錄過,則會允許訪問其路徑,但不會允許訪問authc的路徑。user是介於,anon和authc直之間的。換句話來說:而“/authenticated= user”表示訪問該地址的用戶是身份驗證通過或RememberMe 登錄的都可以。或者說,某個頁面需要登錄才能看,但這個頁面信息又不太重要,就可已使用這個

rememberMe的原理,是將登錄的用戶名,以某種加密的方式,存入cookie中,名字就叫rememberMe,下次登錄就會從cookie裏面找,如果有,pricipal就不會爲空。另外得注意,調用subject.logout()的會將這個cookie清除


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章