shiro學習:shiro整合SpringMVC的web專案
阿新 • • 發佈:2019-02-02
這篇文章只是介紹了shiro與springweb專案進行的整合,並沒有涉及到認證的實現,如果您需要認證的相關實現,請看下我的下一篇:Shiro實現登入和退出
一、準備環境
與其它java開源框架類似,將shiro的jar包加入專案就可以使用shiro提供的功能了。shiro-core是核心包必須選用,還提供了與web整合的shiro-web、與spring整合的shiro-spring、與任務排程quartz整合的shiro-quartz等,下邊是shiro各jar包的maven座標。
二、配置檔案<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-quartz</artifactId> <version>1.2.3</version> </dependency>
2.1web.xml新增shiro Filter
建議將filter-mapping放在其他filter-mapping的上邊,便於第一次執行shiro的filter
<!-- shiro過慮器,DelegatingFilterProxy通過代理模式將spring容器中的bean和filter關聯起來 --> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <!-- 設定true由servlet容器控制filter的生命週期 --> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> <!-- 設定spring容器filter的bean id,如果不設定則找與filter-name一致的bean--> <init-param> <param-name>targetBeanName</param-name> <param-value>shiroFilter</param-value> </init-param> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.2配置application-shiro.xml
注意:自動realm的路徑一定要用我們自己建立的realm路徑
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- web.xml中shiro的filter需要的bean --> <!-- Shiro 的Web過濾器 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <!-- loginUrl認證提交地址,如果沒有認證將會請求此地址進行認證,請求此地址將由formAuthenticationFilter進行表單認證 --> <property name="loginUrl" value="/login.do" /> <!-- 認證成功同意跳轉到first.action 建議不要配置,shiro自動到上一個請求路徑 --> <property name="successUrl" value="/index.do" /> <!-- 通過unauthorizedUrl指定沒有許可權操作時的許可權頁面 --> <property name="unauthorizedUrl" value="/refuse.jsp" /> <!-- 過慮器鏈定義,從上向下順序執行,一般將/**放在最下邊 --> <property name="filterChainDefinitions"> <value> <!-- 對靜態資源設定匿名訪問 --> /images/** = anon /js/** = anon /styles/** = anon <!--/** = authc 所有的url都授權後才能訪問 --> /** = authc </value> </property> </bean> <!-- SecurityManager --> <!-- 安全管理器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <!-- 注入自定義realm --> <property name="realm" ref="customRealm" /> </bean> <!-- 自定義 realm --> <bean id="customRealm" class="org.lpl.controller.shiro.CustomRealm"> </bean> </beans>
2.3自定義realm
public class CustomRealm extends AuthorizingRealm {
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// TODO Auto-generated method stub
return null;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
System.out.println("shiror認證");
return null;
}
}
2.4登入controller
因為我們在shiro的配置檔案中配置瞭如果沒有認證就會跳到login.do這個controller,通過這個controller我們就將將沒有認證的讓他去登入頁面
@Controller
public class LoginCotroller {
/**
* 此方法只處理登入失敗,如果登入成功shiro會自動跳轉到上一個請求路徑
* @param request
* @return
* @throws Exception
*/
@RequestMapping("login.do")//這個路徑要和shiro.xml配置的路徑要一樣
public String login(HttpServletRequest request) throws Exception{
return "login";
}
}
三、測試
直接訪問我們的專案路徑(例如:localhost:8080/SSMShiro),如果自己跳到登入頁面說明成功
四、我的目錄結構: