Spring MVC Url当我在url中编码换行符时,为什么会得到404

时间:2017-02-10 19:36:31

标签: spring model-view-controller encode

我正在向我的控制器发送带有某些参数的URL,这通常很好。我使用javascript函数encodeURI()来编码参数。

但是,由于有换行符,我收到404错误。

这是一个有效的网址:

http://localhost:8080/Weasy/virtualtable/execQuery/46/select%20*%20from%20payment

这是一个非工作网址:

http://localhost:8080/Weasy/virtualtable/execQuery/46/select%20*%20%0Afrom%20payment

这是我的控制器方法:

@RequestMapping("execQuery/{schema_id}/{query}")
public ModelAndView execQuery(
        @PathVariable("schema_id") Integer schemaId
      , @PathVariable("query") String query) throws Exception {

    SrcSchema schema = this.srcschemaService.getRowById(schemaId);

    ModelAndView mav = new ModelAndView("virtualtable/form");
    mav.addObject("schema", schema);
    mav.addObject("query", query);


    try {
        int limit = 10;
        List<Map<String, Object>> rows = jdbcService.executeQuery(schema.getConnection(), query, limit);             
        mav.addObject("rows", rows);
        mav.addObject("message", "<span class='msg-info'>Result Set reduced to "+limit+" rows</span>");
    } catch (Exception ex) {
        logger.error("Error executing sql", ex);            
        mav.addObject("message", "<span class='msg-error'>"+ex.getMessage()+"</span>");

    }


    return mav;
} 

为什么不起作用?

1 个答案:

答案 0 :(得分:0)

我不认为这是你的应用程序。我想这是你的网络服务器阻止请求,因为你正在使用一个奇怪的字符。例如,Apache拒绝访问包含%2F(/),%5F(\)或%00(NULL)的URL。通常,%00和%1F之间的ASCII字符(命名控制字符)不应出现在URL上,%0A就是其中之一。

我的建议是,在执行请求之前,你应该解析你的查询并除去%0A以及任何有问题的字符。

如果你仍想让它工作,我认为你需要在.htaccess中包含一个重写(我猜你正在使用Apache),并使用正则表达式删除换行符并重定向到相同的URL而不用字符。

Apache URL Rewriting Guide