解決springboot整合shiro后過濾器執行順序的問題


1.問題如下:springboot 整合shiro 后出現了 對靜態資源(js,css,jpg)的也會進行攔截,但是我們的配置如下,,

@Bean
    public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager, MyFormAuthenticationFilter myFormAuthenticationFilter) {

        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
        shiroFilter.setSecurityManager(securityManager);
        shiroFilter.setLoginUrl("/auth/login");
        shiroFilter.setSuccessUrl("/");
        shiroFilter.setUnauthorizedUrl("/error.jsp");

        Map<String, Filter> filters = new LinkedHashMap<String, Filter>();
        filters.put("authc", myFormAuthenticationFilter);
        shiroFilter.setFilters(filters);

        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
        filterChainDefinitionMap.put("/auth/getShiroCache", "anon");
        filterChainDefinitionMap.put("/**/*.js", "anon");
        filterChainDefinitionMap.put("/**/*.png", "anon");
        filterChainDefinitionMap.put("/**/*.jpg", "anon");
        filterChainDefinitionMap.put("/**/*.css", "anon");
        filterChainDefinitionMap.put("/error.jsp", "anon");
        filterChainDefinitionMap.put("/noPermission.jsp", "anon");
        filterChainDefinitionMap.put("/auth/logout", "logout");
        filterChainDefinitionMap.put("/**", "authc");
        shiroFilter.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilter;
    }

從上面的配置中我們可以發現,我們對靜態資源進行了優先配置,因為是LinkedHashMap.所以是有序的,但是在實際測試過程中,發現靜態資源需要認證之后才能訪問,

這個和我們的配置邏輯不符,.

那么最關鍵的問題來了

為什么 請求會進入到myFormAuthenticationFilter 這個filter?

 

@Bean
    public MyFormAuthenticationFilter myFormAuthenticationFilter() {
        return new MyFormAuthenticationFilter();
    }

 

因為我們將這個filter配置成bean ,讓spring自動加載,這個filter 會被spring加入到filterchain 中.通過日志我們可以看到

這個過濾器被加載了,並且是攔截的路徑是/*,所以我們在配置這個filter 的時候不能讓spring來管理這個filter.

 

解決方案:采用new 的方式來自已創建這個filter對象.脫離spring的管理這個filter就不會注冊到過濾器鏈中.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM