2009-12-13 5 views
0

나는 서블릿과 JSP에 익숙하지 않다. 코드를 작성하려고하는 샘플 문제에 대해 가장 좋은 디자인이 무엇인지 알고 싶었습니다. 여기에 -디자인 관련 질문 - servlets, jsps, custom tags, html

나는 모든 사용자의 로그인 기록을 나열하는 웹 사이트 (www.example.com)를 만들고 싶습니다. (어떤 기능성이든 원하는 것이 아니라 단지 하나의 예를 든다.)

여기에는 /index.jsp와/login (모든 등록이 완료되었다고 가정) URL이 두 개 있습니다.

index.jsp는 해당 사용자에 대한 모든 이전 로그인을 표시합니다. 그러나 그 경우 사용자가 이미 로그인했는지 여부를 확인해야합니다. 사용자가 이미 로그인 한 상태라면 그에게 그의 기록을 보여 주어야합니다. 그렇지 않으면 로그인 페이지로 자동 전달해야합니다.

사용자가 로그인했는지 여부를 알려주는 사용자 지정 암호 학적으로 강력한 쿠키를 이미 작성했습니다. 따라서 쿠키가 전송되면 쿠키가 인증되었는지 또는 쿠키/세션이 만료되었는지 여부를 확인할 수 있습니다. 그것은 문제가되지 않습니다.

내가 가진 설계상의 문제는 다음과 같습니다. - 인증을위한 Java 클래스 검사는 어떻게 호출해야합니까? 이것을 확인하고 페이지를 다시 쓰는 데 사용자 정의 JSP 태그를 사용합니까? 내 HTML 개발자가 새 페이지를 만들 때 사용할 클래스를 쉽게 만들고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

내 질문에 jsps 및/또는 사용자 지정 태그 라이브러리가있을 수 있습니다 올바른 자바 코드 사용과 관련이 있습니다. 당신이 원할 때까지 오랫동안 호언 장담 할 수있게 해주십시오. :)

감사합니다.

  • 바스는

답변

2

이에 대한 Filter을 사용할 수 있습니다. 이렇게하면 모든 JSP 페이지에 불필요하게 동일한 코드를 복사 할 필요없이 한 곳에서 코드 로직을 유지할 수 있고 JSP를 멋지게 유지할 수 있습니다. 스크립틀릿 -free.

직접 쿠키를 생성하여 세션을 재발 명하는 대신 Java EE에서 제공 한 HttpSession API를 사용할 수도 있습니다. 이것은 기본적으로 이미 쿠키에 의해 뒷받침되며 Java 객체를 세션에 속성으로 저장하여 전체 사용자 세션에서 사용할 수 있습니다. 로그인에

HttpSessionUser 객체를 넣어 :

User user = userDAO.find(username, password); 
if (user != null) { 
    request.getSession().setAttribute("user", user); 
} else { 
    // Show error. 
} 

은 사용자가 로그인 한 경우 Filter을 사용하여 확인합니다.

if (((HttpServletRequest) request).getSession().getAttribute("user") != null) { 
    chain.doFilter(request, response); // User is logged in, just continue with request. 
} else { 
    ((HttpServletResponse) response).sendRedirect("login"); // Not logged in, redirect to login page. 
} 

/secured, /restricted, /users 정도 같은 url-pattern에 매핑 다음과 같이 doFilter() 방법을 구현합니다. 제한된 JSP 페이지를 webcontent의 같은 폴더에 넣으십시오.

은 세션에서 제거 사용자를 로그 아웃하려면

말했다
request.getSession().removeAttribute("user"); 

// Or, more drastically, invalidate the entire session: 
request.getSession().invalidate(); 

는 자바 EE 이미 선언 (XML-설정 기준) 컨테이너 보안 관리 제공, 당신은 그것을 here에 대한 자습서를 찾을 수 있습니다. 이 도구를 사용할 수는 있지만, 예를 들어 로그인 히스토리의 개요를 유지하기 위해 컨테이너가 관리하는 로그인에 대해 애플리케이션을 개별적으로 가로 채고 싶다면 Filter을 생성해야합니다. 예 :

HttpServletRequest httpRequest = (HttpServletRequest) request; 
UserPrincipal user = httpRequest.getUserPrincipal(); 
HttpSession session = httpRequest.getSession(); 
if (user != null && session.getAttribute("user") == null) { 
    session.setAttribute("user", user); 

    // First-time login. You can do your intercepting thing here. 
} 
chain.doFilter(request, response); 
+0

감사합니다. 나는 지금까지 필터에 대해 몰랐다. 나는 그들을 간단히 보았다. 그들은 내가 필요한 것처럼 보입니다. 그렇다면 사용자 이름, 위치 등을 가져 오는 것과 관련하여 UI 관련 항목에 대한 JSP 및 사용자 정의 태그의 논리를 결정하는 데 필터를 사용해야한다는 점에서 맞습니까? – user220201

+0

내 답변의 첫 번째 링크에는 필터에 대해 알아야 할 정보가 포함되어 있습니다. 그들은 ** 요청을 필터 **로 보내려고합니다. JSP는 뷰 기술 일뿐 아니라 ** 동적 인 방식으로 데이터를 제공 **하기 위해 사용되어야합니다. 사용자 정의 JSP 태그는 일반적으로 '