Spring请求每个会话进行预处理

时间:2017-03-29 18:31:59

标签: spring spring-mvc

我想创建 Spring 请求拦截器,它可以从会话中获取一些数据,并在请求之前更改一些 @Autowired 组件。

我可以创建Interceptor并注册它,但它无法访问会话bean:

@Component
@Scope(value="session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class TokenInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    private MyServicePerSession myServicePerSession;


    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println(myServicePerSession.getName()); // NullPointerException!!!

        return true;
    }
}

在每个请求的 preHandle(...)方法的上方,我得到 NullPointerException

这是我的配置:

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    //...   

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TokenInterceptor());
    }
}

除非注入 MyServicePerSession ,否则我说一切正常。

如果您能就此提出建议或解决该问题的其他方法,我将非常感激。

1 个答案:

答案 0 :(得分:1)

您正在尝试设置一个新对象,但您必须设置一个spring bean。

 new TokenInterceptor() // is not spring bean


@Autowired private TokenInterceptor tokenInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(tokenInterceptor); 
    // You have to set bean here
}

如果这不起作用,您可以查看http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch04s02.html