播放框架和自定义http头。如何?

播放框架和自定义http头。如何?,http,header,playframework,nullpointerexception,playframework-1.x,Http,Header,Playframework,Nullpointerexception,Playframework 1.x,我需要将带有登录信息的自定义HTTP头发送到我的play应用程序(play 1.2.5)。该自定义标题由筛选器添加 问题是,当我尝试读取时,播放总是抛出NullPointerException: String loggedUser = request.headers.get("loggeduser").value(); 我还有一个用于测试的servlet,下面的代码可以正确地从标题打印vale out.println(request.getHeader("loggeduser")); 我是不

我需要将带有登录信息的自定义HTTP头发送到我的play应用程序(play 1.2.5)。该自定义标题由筛选器添加

问题是,当我尝试读取时,播放总是抛出NullPointerException:

String loggedUser = request.headers.get("loggeduser").value();
我还有一个用于测试的servlet,下面的代码可以正确地从标题打印vale

out.println(request.getHeader("loggeduser"));
我是不是错过了什么

谢谢

编辑:这是我的过滤器

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    CustomHeaderWrapper wrapper = new CustomHeaderWrapper((HttpServletRequest) request);
    String username = ((HttpServletRequest) request).getRemoteUser();
    wrapper.addHeader("loggeduser", username);
    chain.doFilter(wrapper, response);
}
客户头巾

private Map<String, String> customHeaderMap = null;

public CustomHeaderWrapper(HttpServletRequest request) {
    super(request);
    customHeaderMap = new HashMap<String, String>();
}

@Override
public String getHeader(String name) {
    String header = super.getHeader(name);
    return (header != null) ? header : this.getParameter(name);
}

@Override
public Enumeration getHeaderNames() {
    List<String> names = Collections.list(super.getHeaderNames());
    names.addAll(Collections.list(super.getParameterNames()));
    return Collections.enumeration(names);
}

@Override
public String getParameter(String name) {
    String paramValue = super.getParameter(name); // query Strings
    if (paramValue == null) {
        paramValue = customHeaderMap.get(name);
    }
    return paramValue;
}

public void addHeader(String headerName, String headerValue) {
    customHeaderMap.put(headerName, headerValue);
}
私有映射customHeaderMap=null;
公共CustomHeaderRapper(HttpServletRequest请求){
超级(请求);
customHeaderMap=newHashMap();
}
@凌驾
公共字符串getHeader(字符串名称){
字符串头=super.getHeader(名称);
return(header!=null)?header:this.getParameter(name);
}
@凌驾
公共枚举getHeaderNames(){
列表名称=Collections.List(super.getHeaderNames());
names.addAll(Collections.list(super.getParameterNames());
返回集合。枚举(名称);
}
@凌驾
公共字符串getParameter(字符串名称){
字符串paramValue=super.getParameter(名称);//查询字符串
if(paramValue==null){
paramValue=customHeaderMap.get(名称);
}
返回参数值;
}
public void addHeader(字符串headerName、字符串headerValue){
customHeaderMap.put(headerName,headerValue);
}

我创建了一个小测试项目,并使用了您问题中的代码行。它工作得很好。我使用Chrome插件设置标题


请记住,在将所有标题添加到
request.headers
hashmap之前,它们都会转换为小写。因此,如果您将
“loggedUser”
放在
request.headers.get()
中,它将永远不会工作。

谢谢,我使用了所有小写字母。我已经编辑了question ant,并将添加此自定义标题的代码放在那里。筛选器映射的url模式为/*/*