欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring boot中filter類不能注入@Autowired變量問題

 更新時(shí)間:2021年09月17日 11:30:24   作者:Amo_lt  
這篇文章主要介紹了Spring boot中filter類不能注入@Autowired變量問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

filter類不能注入@Autowired變量

問題描述

項(xiàng)目中的登錄是用了shiro以及filter攔截器。輸入正確的賬號(hào)密碼之后卻不能正常登錄。調(diào)試代碼發(fā)現(xiàn)是filter類中定義的變量userService沒有值,為null,該變量采用的方式是@Autowired自動(dòng)注入。由此我認(rèn)為shiro配置類還是有點(diǎn)問題。

解決辦法

在shiroConfig.java(shiro相關(guān)bean的定義類)中加入一個(gè)bean用來自動(dòng)注入filter中的變量

    @Bean
    public FilterRegistrationBean myLoginRegistrationBean() {
        FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
        filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));
        //  該值缺省為false,表示生命周期由SpringApplicationContext管理,設(shè)置為true則表示由ServletContainer管理  
        filterRegistration.addInitParameter("targetFilterLifecycle", "true");
        filterRegistration.setAsyncSupported(true);     
        filterRegistration.setEnabled(true);
        filterRegistration.setDispatcherTypes(DispatcherType.REQUEST);
     //   filterRegistration.addUrlPatterns("/*");// 可以自己靈活的定義很多,避免一些根本不需要被Shiro處理的請(qǐng)求被包含進(jìn)來
    //    filterRegistration.setName("MyLoginFilter");
     //   filterRegistration.setOrder(1);
        return filterRegistration;
    }

這里面需要注意的是:

filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));

這行代碼,里面的shiroFilter表示另一個(gè)bean。如果你只有一個(gè)filter類,可以直接將shiroFilter替換為你的filter對(duì)象,如:

filterRegistration.setFilter(new MyUserFilter());

更正:

上面那行單獨(dú)給filter注入值的寫法不對(duì)!,應(yīng)該是先給這個(gè)filter定義一個(gè)bean:

 @Bean(name = "myUserFilter")
      public MyUserFilter myUserFilterBean() {
        MyUserFilter bean=new MyUserFilter();
        return new MyUserFilter();
 }

然后:

filterRegistration.setFilter(myUserFilterBean());

因?yàn)椴┲黜?xiàng)目中有三個(gè)filter類,所以不能用第二種new 對(duì)象定義,即時(shí)寫了三個(gè)這種bean,還是只有一個(gè)filter中的變量能夠被注入!所以只能用new DelegatingFilterProxy(“shiroFilter”)方式,因?yàn)閟hiroFilter中已經(jīng)有了三個(gè)filter的定義。其余的相關(guān)bean如下:

    @Bean(name = "formAuthenticationFilter")
      public MyLoginFilter myLoginFilterBean() {
        MyLoginFilter bean=new MyLoginFilter();
        bean.setUsernameParam("username");
        bean.setPasswordParam("password");
        bean.setRememberMeParam("rememberMe");
        bean.setLoginUrl("/admin/login");
        bean.setSuccessUrl("/admin/index.view");
        return bean;
    }
    @Bean(name = "sysUserFilter")
      public SysUserFilter sysUserFilterBean() {
    //  SysUserFilter bean=new SysUserFilter();
        return new SysUserFilter();
    }
    @Bean(name = "myUserFilter")
      public MyUserFilter myUserFilterBean() {
    //  MyUserFilter bean=new MyUserFilter();
        return new MyUserFilter();
    }
    @SuppressWarnings("null")
    @Bean(name = "shiroFilter")
    public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
        logger.info("注入Shiro的Web過濾器-->shiroFilter", ShiroFilterFactoryBean.class);
        ShiroFilterFactoryBean bean=new ShiroFilterFactoryBean();
        bean.setSecurityManager(securityManager);
        bean.setLoginUrl("/admin/login");
        Map<String, Filter> filters = bean.getFilters();//獲取filters
        filters.put("authc", myLoginFilterBean());     //filters中放入三個(gè)filter
        filters.put("sysUser", sysUserFilterBean());
        filters.put("user", myUserFilterBean());
        bean.setFilters(filters);
        LinkedHashMap<String, String> filterChainDefinitionMap=new LinkedHashMap<>();
        filterChainDefinitionMap.put("/admin/login", "authc");
        filterChainDefinitionMap.put("/admin/api/**", "sysUser");
        filterChainDefinitionMap.put("/admin/**", "user");
        bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return bean;
    }

@Component注入@Autowired為空

上面的注入是沒問題的,我的問題出在調(diào)用的地方:

在這里插入圖片描述

直接new出來的對(duì)象是不在spring容器中的,正確的方式是:

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用策略模式解決商場(chǎng)促銷商品問題示例

    Java使用策略模式解決商場(chǎng)促銷商品問題示例

    這篇文章主要介紹了Java使用策略模式解決商場(chǎng)促銷商品問題,簡(jiǎn)單描述了策略模式的概念、原理,并結(jié)合實(shí)例形式分析了Java基于策略模式解決商品促銷問題的相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Tomcat使用IDEA遠(yuǎn)程Debug調(diào)試的講解

    Tomcat使用IDEA遠(yuǎn)程Debug調(diào)試的講解

    今天小編就為大家分享一篇關(guān)于Tomcat使用IDEA遠(yuǎn)程Debug調(diào)試的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • java程序員常見的sql錯(cuò)誤

    java程序員常見的sql錯(cuò)誤

    當(dāng)Java程序員在SQL中要寫個(gè)查詢語句是很簡(jiǎn)單的。但在Java里類似的語句卻不容易,因?yàn)槌绦騿T不僅要反復(fù)考慮編程范式,而且也要考慮算法的問題。下面我們來看看這幾個(gè)常見的錯(cuò)誤吧
    2019-06-06
  • 簡(jiǎn)單理解遵循接口隔離原則的Java設(shè)計(jì)模式編程

    簡(jiǎn)單理解遵循接口隔離原則的Java設(shè)計(jì)模式編程

    這篇文章主要介紹了遵循接口隔離原則的Java設(shè)計(jì)模式編程,針對(duì)Java編程中interface接口方面的編寫進(jìn)行約束,需要的朋友可以參考下
    2016-02-02
  • Java中的equsals和==

    Java中的equsals和==

    這篇文章主要介紹了Java中的equsals和==的相關(guān)內(nèi)容,感興趣的朋朋友可以參考下文
    2021-08-08
  • Java注解簡(jiǎn)單使用實(shí)例解析

    Java注解簡(jiǎn)單使用實(shí)例解析

    這篇文章主要介紹了Java注解簡(jiǎn)單使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • MyBatis中#和$的區(qū)別小結(jié)

    MyBatis中#和$的區(qū)別小結(jié)

    ${} 和 #{} 都是 MyBatis 中用來替換參數(shù)的,它們都可以將用戶傳遞過來的參數(shù),替換到 MyBatis 最終生成的 SQL 中,但它們區(qū)別卻是很大的,接下來我們一起來看
    2023-09-09
  • SSH框架網(wǎng)上商城項(xiàng)目第6戰(zhàn)之基于DataGrid的數(shù)據(jù)顯示

    SSH框架網(wǎng)上商城項(xiàng)目第6戰(zhàn)之基于DataGrid的數(shù)據(jù)顯示

    SSH框架網(wǎng)上商城項(xiàng)目第6戰(zhàn)之基于DataGrid的數(shù)據(jù)顯示,提供了豐富的選擇、排序、分組和編輯數(shù)據(jù)的功能支持,感興趣的小伙伴們可以參考一下
    2016-05-05
  • spring mvc配置bootstrap教程

    spring mvc配置bootstrap教程

    這篇文章主要為大家詳細(xì)介紹了spring mvc配置bootstrap,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • idea插件生成jpa實(shí)體類的實(shí)現(xiàn)示例

    idea插件生成jpa實(shí)體類的實(shí)現(xiàn)示例

    本文主要介紹了idea插件生成jpa實(shí)體類的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01

最新評(píng)論