2017-02-10 2 views
0

특정 매개 변수가있는 URL을 내 컨트롤러에 보내고 있습니다. 일반적으로 정상적으로 작동합니다. 자바 스크립트 함수 인 encodeURI()를 사용하여 매개 변수를 인코딩하고 있습니다.스프링 MVC URL URL에 라인 피드를 인코딩 할 때 404가 나타나는 이유

하지만 곧 줄 바꿈이 있기 때문에 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는 % 2F (/), % 5F (\) 또는 % 00 (NULL)을 포함하는 URL에 대한 액세스를 거부합니다. 일반적으로 제어 문자로 명명 된 % 00과 % 1F 사이의 ASCII 문자는 URL에 나타나서는 안되며 % 0A는 그 중 하나입니다.

제 조언은 요청을 처리하기 전에 쿼리를 구문 분석하고 % 0A뿐만 아니라 문제가있는 문자도 제거해야한다는 것입니다.

여전히 작동하게하려면 .htaccess (내가 아파치를 사용하고있는 것 같음)에 rewriterule을 포함시켜야하고 정규식을 사용하여 줄 바꿈을 제거하고이 URL없이 같은 URL로 리디렉션해야한다고 생각합니다. 그 성격.

Apache URL Rewriting Guide