lw656697752 2012-11-22 15:16
浏览 274
已采纳

大神们,求解!注解方式的参数如何使用过滤器过滤

 

过滤器中的代码:

 

  @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;  
        HttpServletResponse resp = (HttpServletResponse) response;
        chain.doFilter(new HTMLCharacterRequest(req), resp);
    }

 HTMLCharacterRequest:

 

  public HTMLCharacterRequest(HttpServletRequest request) {
        super(request);
    }

    @Override  
    public String getParameter(String name) {  
        return filter(super.getParameter(name));  
    }

    private String filter(String parameter) {
        if(StringHelper.isNullOrEmpty(parameter)){
            return null;
        }
        return StringEscapeUtils.escapeSql(StringHelper.unescape(parameter));
    } 

 这样过滤后 在Controller里面可以使用request.getParameter("xxx")的方式可以获取到处理之后的信息,例如:

前台传递的参数为:escase("你好!")

通过request.getParameter("xxx") 能够获取到  "你好!"

但是通过注解的方式却是未解码的数据:

 

  @RequestMapping("addNewProvince")
    public @ResponseBody
    Map<String, Object> addNewProvince(
            @RequestParam("provinceName") String provinceName,
            @RequestParam("operatorType") String operatorType,
            @RequestParam("desc") String desc, HttpServletRequest request)

什么原因啊?

  • 写回答

1条回答 默认 最新

  • blogzhoubo 2012-11-22 16:44
    关注

    Spring用的不是你封装后的HTMLCharacterRequest对象,而是封装前的实现了HttpServletRequest接口的对象。和Spring的内部实现有关。你封装的HTMLCharacterRequest对象只有过滤完以后,转到Controller里面的时候才会得到。而Spring并没有使用FilterChain最终输出的request和response。

    你可以改成下面这样试一试(估计是不可以,呵呵):

    @RequestParam("desc") String desc, HTMLCharacterRequest request)

    Spring中有下面这些实现了HttpServletRequest接口的类,传给你的对象有可能是下面之中的一种。当然这些对象也是对tomcat提供的对象的封装,就像你的HTMLCharacterRequest类一样。

    FacesWebRequest,
    NativeWebRequest,
    PortletWebRequest,
    DispatcherServletWebRequest,
    ServletWebRequest

    Spring的源码没有研究过,所以只能理解到这了,希望能给你一些提示。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图