How can I get a Spring bean in a servlet filter?

java, servlet-filters, servlets, spring

Solution

Try:

UsersConnectionRepository bean = 
  (UsersConnectionRepository)WebApplicationContextUtils.
    getRequiredWebApplicationContext(filterConfig.getServletContext()).
    getBean("usersConnectionRepository");

Where `usersConnectionRepository` is a name/id of your bean in the application context. Or even better:

UsersConnectionRepository bean = WebApplicationContextUtils.
  getRequiredWebApplicationContext(filterConfig.getServletContext()).
  getBean(UsersConnectionRepository.class);

Also have a look at GenericFilterBean and its subclasses.

Problem

I have defined a `javax.servlet.Filter` and I have Java class with Spring annotations. ``` import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; @Configuration public class SocialConfig { // ... @Bean public UsersConnectionRepository usersConnectionRepository() { // ... } } ``` I want to get the bean `UsersConnectionRepository` in my `Filter`, so I tried the following: ``` public void init(FilterConfig filterConfig) throws ServletException { UsersConnectionRepository bean = (UsersConnectionRepository) filterConfig.getServletContext().getAttribute("#{connectionFactoryLocator}"); } ``` But it always returns `null`. How can I get a Spring bean in a `Filter`?

Original source

Related problems