項目快完工了嘱吗,領(lǐng)導(dǎo)要求加上用戶權(quán)限管理。我了個去滔驾,這算是地基工程啊谒麦,現(xiàn)在才加,可以預(yù)見要折騰一番了哆致。
同事已經(jīng)做了個用戶管理系統(tǒng)绕德,負(fù)責(zé)帳戶管理和權(quán)限管理。并通過Dubbo注冊發(fā)布服務(wù)摊阀,要求我從注冊中心獲得服務(wù)耻蛇,并根據(jù)表單提交的用戶名、密碼進(jìn)行鑒權(quán)和授權(quán)胞此。
首先臣咖,給項目添加個Filter,在web.xml中添加shiroFilter
其次漱牵,需要通過Spring MVC注入shiroFilter夺蛇,其定義如下
小插曲:在登陸跳轉(zhuǎn)時,按道理是應(yīng)該跳轉(zhuǎn)到successUrl指定的地址上去酣胀,但是刁赦,我在無session登陸時候,老是跳轉(zhuǎn)到默認(rèn)的"/"(如果存在用戶session闻镶,它會跳轉(zhuǎn)到上次session會話時停留的頁面甚脉,這個功能挺好)。最后儒溉,重寫FormAuthenticationFilter類宦焦,并指定URL。參考:Shiro登錄成功之后跳到指定URL顿涣。
回到正文:securityManager是Shiro的心臟波闹;所有具體的交互都通過SecurityManager進(jìn)行控制;它管理著所有Subject涛碑、且負(fù)責(zé)進(jìn)行認(rèn)證和授權(quán)精堕、及會話、緩存的管理蒲障。參考:第一章 Shiro簡介——《跟我學(xué)Shiro》
這其中最重要的屬性當(dāng)屬realm歹篓,可以有1個或多個Realm瘫证,可以認(rèn)為是安全實體數(shù)據(jù)源,即用于獲取安全實體的庄撮;可以是JDBC實現(xiàn)背捌,也可以是LDAP實現(xiàn),或者內(nèi)存實現(xiàn)等等洞斯;由用戶提供毡庆;根據(jù)數(shù)據(jù)源,對用戶進(jìn)行鑒權(quán)和授權(quán)烙如。
shiroDbRealm類定義如下
其中么抗,紅框內(nèi)的Service為注冊在Dubbo中的分布式服務(wù)⊙翘可以在Dubbo配置文件中予以聲明注入蝇刀。(在項目啟動過程中,可能會去檢測服務(wù)provider是否存活徘溢,而影響項目運行吞琐,可以在該處設(shè)置check=false,關(guān)閉檢測)
最后甸昏,繪制登陸頁面顽分,配置首頁根據(jù)MenuSearchInterface請求資源組織菜單項