이로

JSP 로그인 요청한 곳으로 가게하기 본문

컴퓨터/과제

JSP 로그인 요청한 곳으로 가게하기

利路 2019. 6. 21. 20:55
반응형

홈페이지를 만들 때 로그인 요청한 곳으로 로그인 후 돌아가게 하는 방법입니다.

 

간략 요약

1. index 페이지에서 로그인 버튼 클릭시

<a id="login" href="/login.jsp?from=/index.jsp" hidden=<%=loginState%>>Login</a>

?from=/index.jsp로 login.jsp사이트에 이름은 from이고 value는 /index.jsp 를 보내준다.

 

2. login.jsp 페이지

<% String recentURI = request.getParameter("from"); %>

위 코드로 index페이지에서 보낸 from의 value를(/index.jsp) recentURI에 저장한다.  

그 다음 로그인 정보를 LoginAction 페이지로 보낼 때, 이전 페이지 정보도 함께 보내야 한다.

<form action="/LoginAction?from=<%=recentURI%>" method=post>

 

3. LoginAction.java페이지

String recentURI = request.getParameter("from");// login에서 보낸 from으로 로그인 요청한 URI 받기

로그인페이지에서 보낸 from의 value를 recentURI에 저장한다.

로그인 성공시 로그인창 이전 페이지로 보낸다.

response.sendRedirect(recentURI); // 로그인 하기전 페이지로 보내기

 

로그인 실패시에도 recentURI를 유지해주지않으면 로그인 창에서 로그인 실패시 recentURI정보가 날아갈 수 있다. 그렇기에 삭제되지않도록 해 주어야 한다. (아래 코드 참고)

 

========== ===== login.jsp ===== ==========

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 홈, 로그인, 로그아웃, 보드 만들기 -->
	<!-- 홈은 index.jsp 로 이동, 로그인은 login.jsp로 이동, board는 board.jsp로 이동 -->
	<!-- <a>로 4개 만들기 -->
	<%
		//로그인 상태에 따라 로그인, 로그아웃 메뉴 노출 바꾸게하기
		boolean loginState; //로그인 상태 표시해주는 변수
		if (session.getAttribute("LoginID") == null) { // 로그인 id가져오기
			loginState = false;//로그인 안된 상태일 경우
		} else {
			loginState = true; // 로그인 된 상태일 경우
		}
	%>
	<a href="/index.jsp">HOME</a><!-- index로 가는 링크 -->
	<!-- login로 가는 링크이다.'?from=/index.jsp'는 데이터 (/index.jsp) 를 login.jsp에 전달해준다. -->
	<a id="login" href="/login.jsp?from=/index.jsp" hidden=<%=loginState%>>Login</a>
	<a id="logout" href="/logout.jsp" hidden=<%=!loginState%>>Logout</a>
	<a href="/board.jsp">Board</a><!-- board로 가는 링크 -->

</body>
</html>

 

========== ===== login.jsp ===== ==========

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 홈, 로그인, 로그아웃, 보드 만들기 -->
	<!-- 홈은 index.jsp 로 이동, 로그인은 login.jsp로 이동, board는 board.jsp로 이동 -->
	<!-- <a>로 4개 만들기 -->
	<%
		//로그인 상태에 따라 로그인, 로그아웃 메뉴 노출 바꾸게하기
		String loginState; //로그인 상태 표시해주는 변수
        String loginState1;
		if (session.getAttribute("LoginID") == null) { // 로그인 id가져오기
			loginState = hidden;//로그인 안된 상태일 경우
            loginState1= visible;
		} else {
			loginState = true; // 로그인 된 상태일 경우
            loginState = visible;
		}
	%>
	<a href="/index.jsp">HOME</a><!-- index로 가는 링크 -->
	<!-- login로 가는 링크이다.'?from=/index.jsp'는 데이터 (/index.jsp) 를 login.jsp에 전달해준다. -->
	<a id="login" href="/login.jsp?from=/index.jsp" hidden=<%=loginState1%>>Login</a>
	<a id="logout" href="/logout.jsp" hidden=<%=loginState%>>Logout</a>
	<a href="/board.jsp">Board</a><!-- board로 가는 링크 -->

</body>
</html>

 

========== ===== LoginAction.java ===== ==========

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session;

@WebServlet("/LoginAction") // URL 뒷쪽에 붙는 이름이다. 이 쿼리를 입력하지 않으면 주소와 프로그램과 연결해주지 못한다.
public class LoginAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// id, pwd, checkbox 정보 받아오기
		String id = request.getParameter("id"); // id 넘어온다.
		String pwd = request.getParameter("pwd"); // pwd 넘어온다.
		String checkbox = request.getParameter("checkbox");// 체크박스의 체크여부 넘어온다.
		String recentURI = request.getParameter("from");// login에서 보낸 from으로 로그인 요청한 URI 받기
		HttpSession session = request.getSession(); // 세션 생성
		String sessionID = session.getId();// 세션 아이디 받아오기

		response.setCharacterEncoding("UTF-8"); // 한글도 입력 가능하게 하기
		PrintWriter out = response.getWriter();

		Cookie cookie = new Cookie("userId", id);// 쿠키 생성

		if (checkbox == null) {
			cookie.setMaxAge(0);// 체크박스 체크 해제되었을 때 쿠키 유효시간 0으로 해서 브라우저에서 삭제하게 한다.
			response.addCookie(cookie);
		}
		// id , pwd 에 null 체크 반드시 하기
		if ((id != null) && (pwd != null)) {
			if (id.equals("asdf") && pwd.equals("1234")) { // 로그인 성공시
				// id 와 pwd가 일치하는 경우 index.jsp로 이동 경로설정 주의!! context 값 / 으로해놓았다.
				if (checkbox != null) { // 체크박스 체크여부에 따라 쿠키 저장 확인
					response.addCookie(cookie); // 체크박스 체크 되었을 때 쿠키 저장
				}
				session.setAttribute("LoginID", id);// 세션에 로그인 아이디를 속성으로 넣기
				session.setMaxInactiveInterval(60*10);//세션의 수명을 10분으로 설정
				response.sendRedirect(recentURI); // 로그인 하기전 페이지로 보내기
			} else { // 로그인 실패시
				response.sendRedirect("/login.jsp?from="+recentURI);// 로그인 실패시 바로 login 화면으로 돌아가게하기
				// 어디서 보냈는지 기억해야하므로 recentURI추가해줘야한다.
			}
		}

	}
}

 

 

 

반응형
Comments