我有一些控制器使用@RequestHeader注释来获取登录用户。在调用方法之前,我似乎无法找到更改标头的正确方法。 我已经尝试包装请求并使用拦截器(在预处理方法中,如果我没有弄错)并传递请求,但似乎没有查询标头。 servlet调度程序抛出一个异常,即标头中缺少用户名。 因此,我想知道是否有人知道spring如何以及何时处理此注释,因此我可以编写适当的拦截器。
手头没有代码,但如果需要,我稍后会发布片段。但问题很简单:当在控制器方法上使用@RequestHeader时,如何在请求头中注入一个参数?
亲切的问候, 汤姆
首先编辑: @Sotirios 我尝试使用过滤器,它可以工作。但这对我来说不如handlerinterceptor方便。因为我只需要过滤器进行调试。所以再一个更好的问题:为什么这不能用拦截器?
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
final HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(httpRequest) {
@Override
public Enumeration getHeaders(String name) {
Enumeration headers = super.getHeaders(name);
if( isUseFilter() && Constants.REMOTE_USER.equalsIgnoreCase(name) ){
String user = super.getHeader(name);
headers = enumeration(asList(isEmpty(user)? getDebuggingUserId() :user));
}
return headers;
}
};
chain.doFilter(wrapper, response);
}