2015-06-23 2 views
3

Я создаю приложение с Spring 4.1.6, у меня есть вся конфигурация в классе java. Мой AppConfig:Spring 4 autowire to Filter

@Configuration 
    @EnableWebMvc 
    @ComponentScan(basePackages = "pl.wrweb.springrest") 
    public class AppConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 

    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

    @Bean(name = "messageSource") 
    public ReloadableResourceBundleMessageSource getMessageSource() { 
     ReloadableResourceBundleMessageSource resource = new ReloadableResourceBundleMessageSource(); 
     resource.setBasename("classpath:messages"); 
     resource.setDefaultEncoding("UTF-8"); 
     return resource; 
    } 

} 

AppInitializer:

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    public void onStartup(ServletContext container) throws ServletException { 


     AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
     ctx.register(AppConfig.class); 
     ctx.setServletContext(container); 
     ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx)); 
     servlet.setLoadOnStartup(1); 
     servlet.addMapping("/"); 

     container.addFilter("customFilter", new DelegatingFilterProxy(new CustomFilter())).addMappingForUrlPatterns(null, true, "/*"); 

    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[0]; 
    } 


    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[0]; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class<?>[0]; 
    } 
} 

и мой CustomFilter:

@Configuration 
@EnableWebSecurity 
public class CustomFilter implements Filter { 

    @Autowired 
    UserService userService; 

    public void init(FilterConfig fc) throws ServletException { 

    } 

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc) throws IOException, ServletException { 

     HttpServletRequest httpServletRequest = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 

     if (httpServletRequest.getRequestURI().contains("/employee/")) { 
      String token = httpServletRequest.getHeader("x-token"); 
      System.out.println("token " + token); 
      Long userId = TokenUtils.getUserNameFromToken(token); 
      System.out.println("ObjectStore.token " + ObjectStore.token); 

      if (token!=null) { 
       if (token.equals(String.valueOf(ObjectStore.token))) { 
        int index = ObjectStore.token++; 
        ObjectStore.token = index+1; 
        System.out.println("index " +ObjectStore.token + "token " + token); 
        response.setHeader("x-token", String.valueOf(ObjectStore.token)); 
        fc.doFilter(req, response); 
       } else { 
        response.sendError(HttpStatus.FORBIDDEN.value()); 
        fc.doFilter(req, response); 
        return; 
       } 
      } else { 
       response.sendError(HttpStatus.FORBIDDEN.value()); 
       fc.doFilter(req, response); 
       return; 
      } 
     } else { 
      fc.doFilter(req, res); 
     } 
    } 

    public void destroy() { 

    } 

} 

Все работает нормально, но я не могу вводить UserService и это нуль, мне это нужно, чтобы проверить маркер в запросе.

+0

Может иметь некоторую помощь: http://stackoverflow.com/questions/9690754/spring-and-autowired-on-a-delegatingfilterproxy – Arpit

+1

я стараюсь, но Я хочу сделать ii в java config. – Johny0987

+0

@ Johny0987, я также сталкиваюсь с той же проблемой. Вы оценили наше решение в весеннем ботинке для этого? – kaluva

ответ

1

привет, вы должны использовать код, подобный этому !!!

private UserService userService; 

, а затем

public void init(FilterConfig fc) throws ServletException { 
    ApplicationContext app = WebApplicationContextUtils.getRequiredWebApplicationContext(fc.getServletContext()); 
    userService= app.getBean(UserService.class); 
} 
+0

да это право! –

Смежные вопросы