java - Spring boot-将服务注入(inject)doFiler

标签 java spring-boot

我正在尝试将身份验证服务注入(inject)过滤器 -

@Autowired
AuthRequestService authService;

并在 doFiler 方法中使用它 -

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    System.out.println("SAPServiceFilter: "+ req.getRequestURI());
    //TODO - create auth sender
    authService.isAuthnticate((HttpServletRequest)request); //null
    chain.doFilter(request, response);
}

我的过滤器类位于我的@SpringBootApplication类的子包中,并用@service注释 -

@Service
public class AuthRequestService {

    @PostConstruct
    public void init() {
        System.out.println("AuthRequestService @PostConstruct");
    }

    public boolean isAuthnticate(HttpServletRequest request) {
        System.out.println("isAuthnticate");
        return true;
    }
}

当使用 - 列出我的所有 bean 时,该类也会出现

for (String name : applicationContext.getBeanDefinitionNames()) {
    System.out.println(name);
}

仍然在调试 authService 为 null 时,过滤器的最后一件事是使用 FilterRegistrationBean 注册 -

FilterRegistrationBean<SAPServiceFilter> filterRegBean = new FilterRegistrationBean<>();
filterRegBean.setFilter(new SAPServiceFilter());

最佳答案

您可以使用构造函数注入(inject)。假设您的过滤器注册 bean 位于组件中并且可以访问该服务,您可以在那里 Autowiring 它并使用构造函数传递它

@Autowired  
AuthRequestService authRequestService;

[...]

FilterRegistrationBean<SAPServiceFilter> filterRegBean = new FilterRegistrationBean<>();
filterRegBean.setFilter(new SAPServiceFilter(authRequestService));

关于java - Spring boot-将服务注入(inject)doFiler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52947543/

相关文章:

java - 根据基本的 oop 约定,菜单代码应该在 main 方法中还是在类中?

java - 通过 IntelliJ 运行配置运行 Spring boot

java - 注释不起作用之前的Spring AOP

eclipse - Spring Tool Suite 表示无法创建 BootDashView(或任何 Spring View )

java - @SequenceGenerator allocationSize 'duplicate key error' 问题

java - Apache Camel : Is there any way to set a message to fault without injecting the exchange in a bean method?

java - 上下文在Fragment中返回null

java - 为什么 System.out.print 会导致自动刷新?

json - Spring Boot - 将 JSON 转换为 JAVA

java - JPA插入外键为空