覆盖web.xml过滤器配置

时间:2014-06-04 11:41:24

标签: spring java-ee cors web.xml

是否有任何优雅的方法来覆盖web.xml配置并从java类向cors.allowOrigin添加内容。我的allowOrigin需要由非硬编码的代码生成。

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
      <param-name>cors.allowOrigin</param-name>
      <param-value>ORIGINS</param-value>
    </init-param>
    ...
</filter>

当然我可以覆盖CORSFilter,但我有

@Override
public void init(final FilterConfig filterConfig)
    throws ServletException {}

其中FilterConfig是一个只读接口,对Enumerations也是只读的...通常以这种方式解决问题迫使我写出许多额外的奇怪代码。有没有最短的解决方案?

1 个答案:

答案 0 :(得分:0)

我认为这是容器的一部分,只能通过设计阅读。要超宽,您需要制作卷影副本,并参考只读的默认值/需要更改的内容。

对于另一个项目,我们需要在servlet中添加params,所以我们这样做了

package com.sel2in.req

import java.util.HashMap;     import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class WrapedRequest extends HttpServletRequestWrapper {
    private Map<String, String> myP = new HashMap<String, String>();

    private HttpServletRequest req;

    public WrapedRequest(HttpServletRequest request) {
        super(request);
        req = request;
    }

    public void setParameter(String s, String v) {
        myP.put(s, v);
    }

    public java.lang.String getParameter(java.lang.String name) {
        String s = myP.get(name);
        if (s != null)
            return s;
        return req.getParameter(name);
    }
           //over ride more if needed

}

并使用它

wrpReq = new WrapedRequest(req);
wrpReq.setParameter("userid", username);

同样,您需要使用FilterConfig

执行此操作