天天看點

shiro架構從入門到精通(一)

今天剛接觸shiro架構,以前也看到過,隻是沒有去學習,今天接觸一下,感覺還是很容易的,先就讓我們一步步探讨,看看shiro怎麼用,我們為什麼要用shiro,它能給我們帶來了什麼好處。

一、先學會怎麼樣使用shiro:

本人觀點,學知道,再使用,然後精通,因為此架構比較簡單,那麼讓我們直接進入前面兩步驟。

二、shiro 能做什麼

聲明:本文純屬個人了解

    shiro 是一個權限管理架構,它能夠完成認證、授權、加密、會話管理等功能。認證和授權為權限控制的核心,簡單來說,“認證”就是證明你是誰? Web 應用程式一般做法通過表單送出使用者名及密碼達到認證目的。“授權”即是否允許已認證使用者通路受保護資源

這裡為大家推薦兩篇非常不錯的部落格,建議初學者可以先看看這兩篇部落格,對shiro有個初步了解以後再來跟着我一起學習,一些基本的解釋這裡就不說了大家可以參考部落格:

http://www.open-open.com/lib/view/open1334628062874.html

http://www.ibm.com/developerworks/cn/java/j-lo-shiro/

我相信看完上邊兩篇播客後你已經對shiro有了了解,下邊開始教大家如何使用shiro了

1.首先在web.xml中配置過濾器讓請求資源經過 Shiro 的過濾處理,這與其它過濾器的使用類似

<!-- Spring ApplicationContext配置檔案的路徑,可使用通配符,多個路徑用,号分隔 此參數用于後面的Spring Context Loader -->

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>

        classpath*:/applicationContext-shiro.xml

    </param-value>

</context-param>

<!-- shiro security filter -->

<filter>

    <!-- 這裡的filter-name要和spring的applicationContext-shiro.xml裡的

            org.apache.shiro.spring.web.ShiroFilterFactoryBean的bean name相同 -->

    <filter-name>shiroSecurityFilter</filter-name>

    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

    <init-param>

        <param-name>targetFilterLifecycle</param-name>

        <param-value>true</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>shiroSecurityFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

2.applicationContext-shiro.xml檔案中

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="

       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <description>Shiro安全配置</description>

    <bean id="shiroSecurityFilter"

    <!--初始化資源-->

        class="cn.com.dhc.ec.web.admin.shiro.CustomShiroFilterFactoryBean">

         <!-- shiro的核心安全接口 在 Shiro 認證與授權處理過程中,提及到 Realm。Realm 可以了解為讀取使用者資訊、角色及權限的 DAO。由于大多 Web 應用程式使用了關系資料庫,是以實作 JDBC Realm 是常用的做法-->  

        <property name="securityManager" ref="securityManager" />

        <!-- 要求登入時的連結 -->

        <property name="loginUrl" value="/login.jhtml" />

        <!-- 登陸成功後要跳轉的連接配接 -->

        <property name="successUrl" value="/index.jhtml" />

        <!-- 無權通路時重定向到登入頁面 -->

        <property name="unauthorizedUrl" value="/login.jhtml" />

        <property name="filters">

            <util:map>

                <entry key="authc" value-ref="ecAuthenticationFilter" />

            </util:map>

        </property>

    </bean>

    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

        <property name="realm" ref="storeShiroRealm" />

        <!-- Security緩存,隻緩存角色和權限,不緩存認證資訊 -->

        <property name="cacheManager">

            <bean class="org.apache.shiro.cache.MemoryConstrainedCacheManager"></bean>

        </property>

    </bean>

    <bean id="ecAuthenticationFilter" class="cn.com.dhc.ec.fw.web.shiro.EcAuthenticationFilter">

        <property name="redirectToSavedRequest" value="false"></property>

        <property name="errorJsonView">

            <bean

                class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">

                <property name="extractValueFromSingleKeyModel" value="false"></property>

            </bean>

        </property>

    </bean>

    <bean id="storeShiroRealm" class="cn.com.dhc.ec.web.admin.shiro.StoreShiroRealm">

        <property name="credentialsMatcher" ref="ecCredentialsMatcher"></property>

        <property name="authenticationCachingEnabled" value="false"></property>

    </bean>

    <!-- 密碼判斷器 -->

    <bean id="ecCredentialsMatcher" class="cn.com.dhc.ec.fw.web.shiro.EcPasswordCrypter">

    </bean>

    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

    <bean

        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">

        <property name="staticMethod"

            value="org.apache.shiro.SecurityUtils.setSecurityManager" />

        <property name="arguments" ref="securityManager" />

    </bean>

</beans>

繼續閱讀