response.getWriter에서 던져 IOException이()에 관해서는 소나 위반을 해결하는 방법 :응답을 구축하기 위해 다음 코드가 포함 나는 아주 간단한 서블릿을
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType(CONTENT_TYPE);
final PrintWriter out = response.getWriter();
// ...
내 수중 음파 탐지기가 함께 중요한 문제를 제기 규칙 : "Exceptions should not be thrown from servlet methods". 소나는 이러한 예외가 던져 질 수 있도록 나쁜 생각 설명 : 서블릿에서 예외를 잡을 수
실패는 취약한 상태로 시스템을 떠날 수, 가능한 서비스 거부 공격의 결과로, 또는 노출 왜냐하면 서블릿이 예외를 던지면 서블릿 컨테이너는 일반적으로 디버깅 정보 을 다시 사용자에게 보냅니다. 그리고 그 정보는 침입자에게 매우 가치있을 수 있습니다.
그러나 예를 이해한다면 response.getWriter()에서 잠재적 인 IOException을 현명하게 관리하는 방법을 알 수 없습니다.
일부 사람들은이 진술이 예외를 제기 할 수있는 때를 설명하고, 우리 자신이 그것을 어떻게 관리해야하는지/왜 중요합니까?
편집 : 나는 조금 좌절했지만 첫 번째 대답을 수락했다. stacktrace와 가능한 다른 민감한 정보를 세계에 공개하는 기본 동작처럼 서블릿 컨테이너가이 예외를 관리하게하는 것은 나쁜 습관입니다. 필자의 경우 HTTP 엔드 포인트가 내부 모니터링에 사용되었습니다. 그래서 내 경우에는 (관련된) 정보를 공개하고 싶었고, 아무런 PrintWriter가 없다면 어떻게 할 수 있는가? ...
내 프로그램은 오류 로그를 출력하고 HTTP 오류를 반환한다. 내용이없는 코드. 나는 그것이 정말로 일어날 수 있는지 모른다. .. 그러나 Sonar와 나는 행복하다.
1) catch하고 로그하여 클라이언트에 아무 것도 제공하지 않거나 2) 필터를 사용하여 요청 처리기에서 벗어난 예외를 catch 한 다음 사용자에게 합당한 것을 제시 할 수 있습니다 (예 : http : /stackoverflow.com/questions/11245932/how-to-handle-exceptions-thrown-while-rendering-a-view-in-spring-mvc). 또한 Sonar가 최악의 경고를 제공하지만 특정 시나리오에서 어떤 것이 적절한 지 판단 할 수는 없습니다. –
@ JasonC 다른 답변에 대한 링크는 나에게 좋은 대답 인 반면, 이것이 SonarQube 경고에 대한 해결책이라는 사실을 계속 지킬 가치가 있다고 생각합니다. (면책 조항 : 나는 sonarqube 용 자바 분석기를 개발한다.) 그래서 나는 질문을 재개하고 중복으로 표시하지 않아야한다고 생각하는 이유이다). – benzonico
@benzonico OP는 서블릿에서 던져진 예외를 관리하는 베스트 프랙티스를 분명히 요구합니다. 서블릿은 복제본과 동일하며 잘 응답됩니다. 일부 품질 경영 시스템 경고로 인해 OP가 방금 전에 그것에 대해 생각하기 시작했다는 사실은 부수적이며 매우 관련성이 없습니다. 그 질문이 어떻게 변했다고 생각합니까? –