문제

나는 Servlets와 JSP를 처음 접했습니다. 코드를 작성하려는 샘플 문제에 가장 적합한 디자인이 무엇인지 알고 싶었습니다. 여기 간다 -

나는 모든 사용자의 로그인 이력을 나열하는 웹 사이트 (www.example.com)를 만들고 싶습니다 (원하는 기능은 아니라 하나를 위해서는 예제입니다).

따라서 여기에는 /index.jsp 및 /로그인에 두 개의 URL이 있습니다 (모든 등록이 완료되었다고 가정합니다).

index.jsp는 해당 사용자의 과거 로그인을 모두 표시합니다. 그러나이를 위해 사용자가 이미 로그인되었는지 여부를 식별해야합니다. 사용자가 이미 로그인 된 경우 그에게 그의 역사를 보여주고, 그렇지 않으면 그를 로그인 페이지로 자동 전달해야합니다.

나는 이미 사용자가 로그인했는지 여부를 알려주는 커스텀 암호적으로 강한 쿠키를 썼습니다. 따라서 쿠키가 나에게 전송되면 그가 인증되었는지 또는 쿠키/세션이 만료되었는지 여부를 확인할 수 있습니다. 그것은 문제가 아닙니다.

내가 가진 디자인 문제는 이것입니다. 인증을위한 Java 클래스 확인은 어떻게 호출되어야합니까? 이것을 확인하고 페이지를 다시 작성하기 위해 사용자 정의 JSP 태그를 사용합니까? 새 페이지를 만들 때 HTML 개발자가 사용할 수 있도록 수업을 쉽게 만들고 싶습니다. 이것을하는 가장 좋은 방법은 무엇입니까?

내 질문은 JSPS에서 Java 코드의 올바른 사용법과 관련이 있으며/또는 사용자 정의 태그 라이브러리 일 수도 있습니다. 당신이 원하는만큼 오랫동안 계속해서 계속하십시오 :)

읽어 주셔서 감사합니다.

  • vas
도움이 되었습니까?

해결책

당신은 a를 사용할 수 있습니다 Filter 이것을 위해. 이렇게하면 모든 JSP 페이지를 통해 동일한 코드를 불필요하게 공제 할 필요없이 코드 로직을 단일 장소에 보관할 수 있으며 JSP를 멋지게 유지합니다. 스크립트-무료.

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

로그인시 방금 User 객체에 HttpSession:

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

사용자가 로그인되어 있는지 확인하려면 Filter. 구현 doFilter() 다음과 같이 방법 :

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

그리고 그것을 an에 매핑하십시오 url-pattern 처럼 /secured, /restricted, /users 정도. To-Be-Pressed JSP 페이지를 WebContent의 동일한 폴더에 넣으십시오.

사용자를 로그 아웃하려면 세션에서 제거하십시오.

request.getSession().removeAttribute("user");

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

즉, Java EE는 이미 선언적 (XML-Config 기반) 컨테이너 관리 보안을 제공합니다. 여기. 당신은 그것을 사용할 수 있지만, 컨테이너가 관리하는 로그인을 예를 들어 로그인 이력에 대한 개요를 유지하기 위해 응용 프로그램이 컨테이너가 관리하는 로그인을 부적절하게 가로 채도록하려면 여전히 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top