java - 我可以在自定义过滤器中使用@Autowired吗

标签 java spring-boot

我在自定义过滤器类中使用@Autowire。我遇到空指针异常。

@Autowire 在过滤器中起作用吗?

这是代码:

public class MyFilter extends CustomFilter {

@Autowire
public MyClass myClass;

@Override
public String getInfo(){
return myClass.getMessage();
}
}

这就是我在配置类中注册 bean 的方式

@Configuration
public class ConfigLoader{ 

@Bean
    public FilterRegistrationBean myFilterBean() {
      final FilterRegistrationBean filterBean = new FilterRegistrationBean();
      filterBean.setFilter(new MyFilter());
      filterBean.addUrlPatterns("/*");
      return filterBean;
    }
}

自定义过滤器:

public abstract class CustomFilter implements Filter {

    public FilterConfig getFilterConfig() {
        return this.filterConfig;
    }

    public void setFilterConfig(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        chain.doFilter(req, resp);
        this.clearContext();
    }

    protected abstract String getInfo();
}

最佳答案

向过滤器类添加@Component注释。

@Component
public class MyFilter extends CustomFilter {

...

让 Spring 创建过滤器 bean 并在配置中 Autowiring 它:

@Configuration
public class ConfigLoader{ 

@Autowired
private MyFilter myFilter;

@Bean
    public FilterRegistrationBean myFilterBean() {
      final FilterRegistrationBean filterBean = new FilterRegistrationBean();
      filterBean.setFilter(myFilter);
      filterBean.addUrlPatterns("/*");
      return filterBean;
    }
}

关于java - 我可以在自定义过滤器中使用@Autowired吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53268071/

相关文章:

java - 如何在 Java 中创建 ZIP 文件?

java - 我 thymeleaf 如何使用页面参数作为属性键?

spring-boot - 从类路径外部的文件夹加载 freemarker 模板

java - 如何在 Spring Boot REST API 上设置超时?

spring-boot - 我在查询 dsl jpa 实体将 dto 转换为 map 时遇到问题

encoding - 如何在Spring Boot中配置CharacterEncodingFilter?

java - 如何在android中使 View 透明?

来自 Xml 数据的 Java 应用程序内存储

java - 如何更改 JUNG 中特定顶点的颜色

java - 我如何从适配器获取数据并在 Android 的 Activity 中显示