2012-06-30 2 views
1

JSP로 웹 사이트를 프로그래밍 중입니다. 사용자가 로그인해야 볼 수있는 페이지가 있습니다. 로그인하지 않은 경우 로그인 양식이 표시됩니다. PHP 코드에서 사용자가 로그인했는지 여부를 확인하는 .jsp 페이지 (단일 파일)를 만들 수 있음을 확인했습니다. 그렇지 않으면 로그인 양식이 표시됩니다. 사용자가 로그인하면 아무 것도 수행되지 않습니다. 그래서이를 수행하기 위해 다음과 같이 JSP로이 구조를 사용합니다 :JSP로 요청을 종료하는 방법 ("return;"이 아님)

머리글, 메뉴 등 ... 본문, 바닥 글 등의 일반 사용자는 로그인 한 사용자에게 표시됩니다.

이 구조는 모든 웹 페이지에 적용하기가 매우 쉽습니다. 그래서 각 웹 페이지에 체크 알고리즘을 적용 할 필요가 없습니다! 나는 이것을 단순히 추가 할 수 있으며 페이지는 안전합니다!

내 문제는 사용자가 로그인하지 않은 경우 로그인 양식과 바닥 글 만 표시되어야한다는 것입니다. 그래서 코드는 몸을 우회해야합니다. 따라서 내 checklogin.jsp 구조화 :

사용자가 로그인하지 않은 경우 로그인 양식과 바닥 글을 표시하고 요청을 종료하십시오. 문제는 요청을 종료하는 방법을 모른다는 것입니다 ... "return;" checklogin.jsp 만 중지하지만 서버는 부모 페이지를 계속 처리합니다! 그러므로 페이지는 2 footer! (상위 페이지에서 1, checklogin.jsp에서 1). 어떻게 이것을 피할 수 있습니까?

은 (출구()가, PHP이의 방법으로!) 제안에 대한

감사합니다!

편집 1 : 나는 또한 response.getOutputStream()을 시도했습니다. close(); 하지만 작동하지 않았다.

편집 2 : PHP에서 필요한 것과 비슷한 아날로그가 있습니다. exit(); 어떤 프로그래밍 언어로 그것을 할 것처럼

답변

2

제 질문에 대한 답변은 out.close()입니다. 이것은 단순히 응답을 종료합니다. JB Nizet이이 문제에 대한 또 다른 측면을 지적 해 주신 덕택입니다.

1

당신은 그것을 할 :

<c:choose> 
    <c:when test="userIsLoggedIn"> 
     normal header, body 
    </c:when> 
    <c:otherwise> 
     login form 
    </c:otherwise> 
</c:choose> 
footer 

을하지만 큰 문제는 당신이 모든 것을하지 말아야 할 것입니다. 마크 업 생성에는 JSP를 사용해야합니다. 사용자가 로그인되어 있는지 여부를 확인하고 결과에 따라 페이지 또는 다른 페이지를 표시하지 마십시오. 해당 JSP로 디스패치하는 서블릿에서 Java로이를 수행해야합니다. 그것은 MVC 패턴입니다.

거의 모든 요청에 ​​대해 수행해야하는 작업이므로 서블릿 필터에서 처리해야합니다. 필터는 서블릿과 같은 일련의 URL에 매핑되고 이러한 URL에 대한 모든 요청을 차단합니다. 따라서 필터는 사용자가 로그인했는지 확인하고 그렇지 않은 경우 로그인 페이지로 리디렉션하는지 확인합니다. 사용자가 인증되면 요청을 URL에 매핑 된 서블릿/JSP로 이동하는 것 외에는 아무 것도하지 않습니다.

예를 들어, 필터에 대해 더 알고 싶다면 http://www.oracle.com/technetwork/java/filters-137243.html을 읽으십시오.

+0

jsp와 서블릿에는 큰 차이가 없다고 생각했습니다. 나는 서블릿을 다른 애플리케이션을위한 서버로 사용한다. 어쨌든 내 방법은 많은 JSP에서 한 페이지를 모듈로 사용하기 때문에 필터와 거의 비슷합니다. 그래서 나는 쉽게 바꿀 수 있고 쉽게 디버깅 할 수 있습니다 ... 필터는 매우 유용하며 어쩌면 나중에 그들에게 말을 걸 것입니다. 하지만 내 질문으로 돌아 가면 : 응답을 중지하고 나머지는 모두 플러시 할 수있는 방법이 있습니까? – Genom