【问题标题】:Spring 4 autowire to FilterSpring 4 自动连接到过滤器
【发布时间】:2018-06-18 14:03:53
【问题描述】:

我使用 Spring 4.1.6 构建应用程序,我在 java 类中有所有配置。我的 AppConfig:

    @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];
    }
}

还有我的自定义过滤器:

@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 并且它为空,我需要这个来检查请求中的令牌。

【问题讨论】:

  • 可能会有所帮助:stackoverflow.com/questions/9690754/…
  • 我试了一下,但我想在 java config 中做 ii。
  • @Johny0987,我也面临同样的问题。您是否为此在 spring-boot 中找到了我们的解决方案?

标签: spring autowired


【解决方案1】:

你应该像这样使用代码!

private UserService userService;

然后添加这段代码

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

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 2018-07-05
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    相关资源
    最近更新 更多