2017-02-10 37 views
0

Я отправляю URL-адрес с некоторыми параметрами на свой контроллер, который работает в целом отлично. Я использую функцию javascript encodeURI() для кодирования параметра.Spring MVC Url Почему я получаю 404, когда кодирую строку в URL-адресе

Но как только появится перевод строки, я получаю ошибку 404.

Это рабочий URL:

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

Это нерабочая URL:

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; 
} 

Почему это не Работа?

ответ

0

Я не думаю, что это ваше приложение. Я предполагаю, что ваш веб-сервер блокирует запрос, когда вы используете нечетный символ. Apache, например, отрицает доступ к URL-адресам, содержащим% 2F (/),% 5F (\) или% 00 (NULL). Как правило, символы ASCII между% 00 и% 1F, именованные управляющие символы, не должны присутствовать в URL-адресах, а% 0A является одним из них.

Мой совет: вы должны разбирать свой запрос и избавляться от не только% 0A, но и любого проблемного персонажа перед выполнением запроса.

Если вы все еще хотите сделать это, я думаю, вам нужно включить перезапись в ваш .htaccess (я думаю, вы используете Apache), и используйте регулярное выражение для удаления строки и перенаправления на тот же URL-адрес без этот знак.

Apache URL Rewriting Guide

Смежные вопросы