1. 程式人生 > >009 自定義過濾器

009 自定義過濾器

prop ... IT ID manager ESS pan loginurl 情況下

一 .概述

  在上面的一節之中,我們介紹了過濾器的基本使用,另外使用了內置的過濾器.

  但是有的時候內置的過濾器並不能滿足我們的需求.

  我們就需要使用自定的過濾器.

  在上一節之中,我們說過想要實現自定義的過濾器就需要繼承AccessControllerFilert.

  本節我們就實現一個自定義的過濾器.


二 .自定義過濾器

  我們實現一個訪問該URL就記錄日誌的過濾器.

public class LogFilter extends AccessControlFilter{
    //當訪問該URL之後就記錄日誌
    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
            throws Exception {
        String[] strs 
= (String[]) mappedValue; System.out.println("記錄日誌了"); System.out.println(strs[0]); if("123".equals(strs[0])) { return true; } return false; } //上面的方法返回true,就不會執行下面的方法. @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { System.
out.println("進入了我的方法之中了..."); return false; } }

上面我們定義了一個日誌Filter,其中當url的參數為123的時候拒絕訪問.

配置方式:

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"></property>
        <!-- 配置登錄頁面 -->
        <property name="
loginUrl" value="/login"></property> <!-- 配置未授權頁面的路徑 --> <property name="unauthorizedUrl" value="/unan.jsp"></property> <!-- 配置登錄成功的頁面 --> <property name="successUrl" value="/WEB-INF/success.jsp"></property> <!-- 配置過濾器鏈 這是shiro的web配置的核心 --> <property name="filterChainDefinitions"> <value> /login=anon /authc=authc /user=roles[admin] /user/add=perms[admin:add] /log1=log[123] /log2=log[234] </value> </property> <property name="filters"> <map> <entry key="log" value-ref="logFilter"></entry> </map> </property> </bean>

我們配置到ShiroFilter的Filter之中,是一個map的結構.

我們的測試方式:

    @RequestMapping("/log1")
    public String log1() {
        return "log1";
    }
    @RequestMapping("/log2")
    public String log2() {
        return "log2";
    }

當我們訪問log1的時候,允許訪問.

當我們訪問log2的時候,拒絕訪問.


三 .總結

我們在實際的情況下,實際上不太喜歡自定義過濾器的,因為我們使用自定義的過濾器之後

  維護的成本就變高了.

  因為這一個過濾器的邏輯就需要學習.

  同時我們配置過濾器鏈的時候也出現了一個問題,

  那就是當我們的過濾器鏈變成的時候,我們的配置文件就無限制的增多,不利於維護.

  另外我們還希望動態的改變URL的過濾鏈.

009 自定義過濾器