許可權的控制 shiro的使用
阿新 • • 發佈:2018-12-07
******shiro的使用
三大核心元件
Subject:即當前使用者,在許可權管理的應用程式裡往往需要知道誰能夠操作什麼,誰擁有操作該程式的權利,shiro中則需要通過Subject來提供基礎的當前使用者資訊,Subject 不僅僅代表某個使用者,與當前應用互動的任何東西都是Subject,如網路爬蟲等。所有的Subject都要繫結到SecurityManager上,與Subject的互動實際上是被轉換為與SecurityManager的互動。
SecurityManager:即所有Subject的管理者,這是Shiro框架的核心元件,可以把他看做是一個Shiro框架的全域性管理元件,用於排程各種Shiro框架的服務。作用類似於SpringMVC中的DispatcherServlet,用於攔截所有請求並進行處理。
Realm:Realm是使用者的資訊認證器和使用者的許可權人證器,我們需要自己來實現Realm來自定義的管理我們自己系統內部的許可權規則。SecurityManager要驗證使用者,需要從Realm中獲取使用者。可以把Realm看做是資料來源。
1 pom中匯入shiro-core shiro-spring
<!-- shiro的開發包 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.4.0</version> </dependency>
2 web.xml中匯入攔截器:注意filter-name:shiroFilter要和spring整合shiro中的攔截器名字一致
<!-- 配置shiro的核心攔截器 --> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3.spring整合shiro的配置檔案
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 登入和許可權範圍 --> <bean id="shiroRealm" class="com.shiro.MenuRealm"></bean> <!-- 安全控制器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="shiroRealm" /> </bean> <!-- 註冊所有許可權 --> <bean id="menuChainDefinition" class="com.shiro.MenuChainDefinition"> <property name="urls"> <value> /login.jsp = anon /login.do = anon /logout = anon /index.jsp = user /showStudent.jsp =anon /showStudent2.jsp =anon /updateStudentView.jsp =anon </value> </property> </bean> <!-- 具體攔截功能,id要和web.xml裡面過濾器名字一樣 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login.jsp" /> <property name="unauthorizedUrl" value="/error.jsp" /> <property name="filterChainDefinitionMap" ref="menuChainDefinition"></property> </bean> </beans>
4.編寫資料庫一共五張表,user , role user_role, menu, role_menu
5.pojo,對映檔案, dao的編寫
6.兩個類的編寫,shiro的登入許可權範圍shiroRealm,註冊所有許可權的類menuChainDefinition