首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

在javax.servlet.Filter里设立Paramter

2012-09-16 
在javax.servlet.Filter里设置Paramter今天碰到一个冷僻的需求,需要在Filter里增加request的parameter,类

在javax.servlet.Filter里设置Paramter
今天碰到一个冷僻的需求,需要在Filter里增加request的parameter,类似于

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {...req.setParameter(paramName, paramValue);chain.doFilter(req, resp);}


可是发现ServletRequest可以get/set Attribute但是对Paramter只能get,后来google了半天才
明白,按照j2ee的标准,Paramter是只读的,Attribute才可以读写,要想添加Parameter必须通
过ServletRequestWrapper。具体的做法是,继承ServletRequestWrapper实现自己的类,然后
重载getParameter方法,在其中加入新的Parameter,最后在doFilter中传递自己的RequestWrapper。

以下是相关的代码,是用的HttpServletRequestWrapper。代码是删减过的,只是表示个意思。

public class MyFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {...FilteredRequest filteredReq = new FilteredRequest(slingReq);filteredReq.setLabel(label);filteredReq.setDestName(destName);chain.doFilter(filteredReq, resp);}public void init(FilterConfig conf) throws ServletException {}class FilteredRequest extends HttpServletRequestWrapper {private String label;private String destName;public FilteredRequest(HttpServletRequest request) {super(request);}public void setLabel(String id) {label = id;}public void setDestName(String id) {destName = id;}public String getParameter(String paramName) {if ("label".equals(paramName)) {return label;} else if ("destName".equals(paramName)) {return destName;} else {return super.getParameter(paramName);}}}}

热点排行