Apache Shiro 的三大核心組件:
1惠豺、Subject :當(dāng)前用戶的操作
2濒憋、SecurityManager:用于管理所有的Subject
3虏缸、Realms:用于進(jìn)行權(quán)限信息的驗(yàn)證
Authentication 和 Authorization
在shiro的用戶權(quán)限認(rèn)證過(guò)程中其通過(guò)兩個(gè)方法來(lái)實(shí)現(xiàn):
1温艇、Authentication:是驗(yàn)證用戶身份的過(guò)程鹅很。說(shuō)白了就是獲取驗(yàn)證用戶
2攒至、Authorization:是授權(quán)訪問(wèn)控制厚者,用于對(duì)用戶進(jìn)行的操作進(jìn)行認(rèn)證授權(quán),證明該用戶是否允許進(jìn)行當(dāng)前操作迫吐,如訪問(wèn)某個(gè)鏈接库菲,某個(gè)資源文件等。說(shuō)白了就是用戶驗(yàn)證用戶權(quán)限
其他組件:
除了以上幾個(gè)組件外志膀,Shiro還有幾個(gè)其他組件:
1熙宇、SessionManager :Shiro為任何應(yīng)用提供了一個(gè)會(huì)話編程范式。
2梧却、CacheManager :對(duì)Shiro的其他組件提供緩存支持奇颠。
image.png
基礎(chǔ)例子
編寫操作用戶業(yè)務(wù)的Service:
通過(guò)用戶名查詢用戶信息
通過(guò)用戶名查詢用戶權(quán)限字符串編寫shiro組件自定義Realm:
實(shí)現(xiàn)獲取AuthorizationInfo,權(quán)限字符串的方法
實(shí)現(xiàn)獲取AuthenticationInfo放航,認(rèn)證信息的方法編寫登錄功能
SecurityUtils.getSecurityManager().logout(SecurityUtils.getSubject());
// 登錄后存放進(jìn)shiro token
UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword());
Subject subject = SecurityUtils.getSubject();
subject.login(token);
- 定義shiro的filter
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/toLogin" />
<property name="successUrl" value="/home" />
<property name="unauthorizedUrl" value="/403" />
<property name="filterChainDefinitions">
<value>
/toLogin = authc <!-- authc 表示需要認(rèn)證才能訪問(wèn)的頁(yè)面 -->
/home = authc, perms[/home] <!-- perms 表示需要該權(quán)限才能訪問(wèn)的頁(yè)面 -->
</value>
</property>
</bean>