Jam's story

[JSP] 로그인 화면 본문

JSP

[JSP] 로그인 화면

애플쩀 2022. 6. 22. 11:00

ex02_defualt.jsp - 메인페이지 

<%@ page import="com.util.Cookies"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ include file="auth.jspf" %>
<%-- <%
	//인증(로그인)한다면 쿠키이름(auth) 쿠키값(로그인ID) 저장
	 cname = "auth";
	String logonID = null;
	
	//com.util.Cookies.java
	//Cookies.java 객체 생성 => 생성자 호출 => cookieMap key, value
	Cookies cookies = new Cookies(request);
	if(cookies.exists(cname)){
		//로그인 ㅐㅆ다.
		logonID = cookies.getValue(cname);
	}
%> --%>

<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 22.-오후 8:22:18</title>
<style>
  div{
    border: 1px solid gray;
    width:300px;
    height:100px;
    padding:20px;
  }
</style>
</head>
<body>
<h3></h3>
<%
if(logonID==null){
%>
<div id="logon">
	  <form action="ex02_logon.jsp">
	    아이디 : <input type="text" name="id" value="admin" /><br>
	    비밀번호 : <input type="password" name="passwd" value="1234" /><br>
	    <input type="submit" value="로그인" />
	    <input type="button" value="회원가입" /> 
	  <%
	  String error=request.getParameter("error");
	  if(error!=null){
	  %>
	  <span style="color:red">로그인 실패 </span>
	<%} %>	
	<script>
	$(function(){
		$("#logon span").fadeOut(5000);
	});
	</script>
		  </form></div>
	<%}else { %>
		<div id="logout">
		[<%=logonID %>님 환영합니다.]<br>
		<a href="ex02_logout.jsp">로그아웃</a>
		</div>
<%} %>
	
<  <!-- 로그인 하지 않아도 사용가능한메뉴 -->
  <a href="/jspPro/cstvsboard/list.htm">게시판</a><br>
  <a href="#">공지사항</a><br>
<%
   if(logonID != null){
%>
  <!-- 로그인 해야 사용가능 메뉴 -->
  <a href="#">일정관리</a><br>
  <a href="#">자료실</a><br>

<%
   }

if(logonID != null && logonID.equals("admin")){
      
%>

  <!-- 인증 + 권한(관리자) -->
  <a href="#">급여관리</a><br>
  <a href="#">사원관리</a><br>
  

<%
   } 
%>


</body>
</html>

ex02_logon.jsp

<%@page import="com.util.Cookies"%>
<%@page import="java.util.HashMap"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%
	HashMap<String, String> member = new HashMap<>();
    member.put("admin","1234"); // 관리자
    member.put("hong","1234"); // 일반회원
    member.put("park","1234"); // 일반회원
    String id = request.getParameter("id");
    String passwd = request.getParameter("passwd");
    if( id.equals("admin") && passwd.equals("1234") ) {
        Cookie c =  Cookies.createCookie("auth", id, "/", -1);
        response.addCookie(c);        
        response.sendRedirect("ex02_default.jsp");
    }else if( id.equals("hong") && passwd.equals("1234") ) {
        Cookie c =  Cookies.createCookie("auth", id, "/", -1);
        response.addCookie(c);        
        response.sendRedirect("ex02_default.jsp");
    }else if( id.equals("park") && passwd.equals("1234") ) {
        Cookie c =  Cookies.createCookie("auth", id , "/", -1);
        response.addCookie(c);        
        response.sendRedirect("ex02_default.jsp");
    }else{
       response.sendRedirect("ex02_default.jsp?error");  // 로그인 실패했을 때 ? error
    }
    
    
%>

 

ex02_logout.jsp

경로 
/auth.jspf" / 안쓰는 이유는 /를 쓰면 jspPro밑에 있다는 소리이다. 
여기서는 같은 폴더내에 있으므로 /를 안쓰는거다.
<%@page import="com.util.Cookies"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@include file="auth.jspf" %>
<!-- "/auth.jspf" / 안쓰는 이유는 /를 쓰면 jspPro밑에 있다는 소리이다. -->
<!-- 여기서는 같은 폴더내에 있으므로 /를 안쓰는거다. -->

<%-- 
<%
	String cname = "auth";
	String logonID = null;
	Cookies cookies = new Cookies(request);
	if(cookies.exists(cname)){
		logonID = cookies.getValue(cname);
	}
%>
 --%>
<%
   // 쿠키 삭제 : 만기시점   0  설정
   Cookie c = Cookies.createCookie("auth", "", "/" , 0);
   response.addCookie( c );
   // ex02_default.jsp 이동
%>

<script>
   alert("[<%= logonID%>]님 로그아웃 하셨습니다.")
   location.href = "ex02_default.jsp";
</script>

 

ex02_board.jsp

<%@page import="com.util.Cookies"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@include file="auth.jspf" %>
<%
  //auth 쿠키이름으로 id 저장 유무에 따라 인증 여부 확인
  /* 
  String auth = null;
  String cname= "auth";
  Cookies cookies = new Cookies(request);
  if(cookies.exists(cname)){
	  auth = cookies.getValue(cname);
  }
   */
   
   //위의 코딩 들을 auth.jspf  파일로 빼고 -> include 지시자를 사용해 수정
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
 div{
   border: 1px solid gray;
   width: 300px;
   height: 100px;
   padding: 20px;
 }
</style>
<script>
   $(document).ready(function (){     
	   $("#logon span").fadeOut(5000);
   });
</script>
</head>
<body>
 <h3>default(main) page</h3>
 
 
 <%
   if(logonID==null){
%>

 <div id="logon">
   <form action="ex02_logon.jsp">
     아이디: <input type="text" name="id" value="admin" /><br>
     비밀번호: <input type="password" name="passwd" value="1234"  /><br>
     <input type="submit" value="로그인" />
     <input type="button" value="회원가입" />
     <br>
     <%
     //?error 달려있다면
    String error = request.getParameter("error");
    if(error != null){
    %>
    <span style="color: red">로그인 실패했습니다.</span>
    <%
    }
     %>
   </form>
 </div>
<%	   
   }else{
%>
 <div id="logout">
 [<%=logonID %>]님 환영합니다.<br>
 <a href="ex02_logout.jsp">로그아웃</a>
 </div>
<%
   }
 %>
 
 <!-- 인증, 권한 따라 사용할 메뉴 처리 -->
<!--  게시판과 공지사항은 인증/권한 없이 사용 가능 -->
 <a href="ex02_board.jsp">게시판</a><br>
 <a href="ex02_notice.jsp">공지사항</a><br>
 
 <%
   if(logonID!=null){ //로그인 되어졌음 (인증O)
%>
   <a href="#">일정관리</a><br>
   <a href="#">자료실</a><br>
<%
     if(logonID.equals("관리자")){
    %>
       <a href="#">사원관리-(관리자 권한)</a><br>
       <a href="#">급여관리-(관리자 권한)</a><br>
    <%
     }
   }
 %>
</body>
</html>

 

 

 

include해서 사용하는 auth.jspf

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.util.Cookies" %>
<%
String cname="auth";
String logonID=null;

Cookies cookies = new Cookies(request);
if(cookies.exists(cname)){
	  cname= cookies.getValue(cname);
}

%>

 

 

cookie.java

package com.util;


import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;


//서버에서 쿠키를 다루는 클래스 라이브러리
public class Cookies {

	public Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
	
	public Cookies(HttpServletRequest request) {
		//쿠키값을 얻어와서 Map 안에 저장하는 일을 생성자에서 하겠다.
		Cookie [] cookies = request.getCookies();
		if(cookies!=null) {
			for (int i = 0; i < cookies.length; i++) {
				//String key = cookies[i].getName();
				//Cookie value = cookies[i];
				//this.cookieMap.put(key, value); 
				
				//변수선언 없이 바로 집어 넣는 것이 성능상 좋은 코딩
				this.cookieMap.put(cookies[i].getName(), cookies[i]); 
			}//for
		}//if
	}//constructor
	
	public Cookie getCookie(String cname) {
		//맵 안의 쿠키 이름에 해당하는 쿠키 객체 자체 리턴
		return this.cookieMap.get(cname); 
	}
	
	//쿠키맵 안에 쿠키 존재 여부 반환 메소드
	//존재하면 true, 존재하지 않으면 false
	public boolean exists(String cname) {
		return this.cookieMap.get(cname) != null;
	}
	
	//쿠키 객체를 생성해서 반환하는 메소드
	public static Cookie createCookie(String cname, String cvalue
			, String domain, String path, int expiry) throws UnsupportedEncodingException {
		Cookie cookie = new Cookie(cname, URLEncoder.encode(cvalue,"UTF-8"));
		cookie.setDomain(domain);
		cookie.setPath(path);
		cookie.setMaxAge(expiry);
		return cookie;
	}
	
	//도메인 없이 생성
	public static Cookie createCookie(String cname, String cvalue
			, String path, int expiry) throws UnsupportedEncodingException {
		Cookie cookie = new Cookie(cname, URLEncoder.encode(cvalue,"UTF-8"));
		cookie.setPath(path);
		cookie.setMaxAge(expiry);
		return cookie;
	}
	
	//cname과 cvalue만
	public static Cookie createCookie(String cname, String cvalue) throws UnsupportedEncodingException {
		Cookie cookie = new Cookie(cname, URLEncoder.encode(cvalue,"UTF-8"));
		return cookie;
	}
	
	public String getValue(String cname) throws UnsupportedEncodingException {
		Cookie cookie = this.cookieMap.get(cname);
		if(cookie==null) return null;
		return URLDecoder.decode(cookie.getValue(), "UTF-8");
	}
	
}//class

 

'JSP' 카테고리의 다른 글

[JSP] 세션  (0) 2022.06.22
[JSP] 커넥션풀  (0) 2022.06.22
[JSP] 클라이언트와 대화 - 쿠키  (0) 2022.06.21
[JSP] 게시판 - 목록, 글쓰기 기능 , 페이징 처리  (0) 2022.06.20
[JSP]자바빈즈  (0) 2022.06.20
Comments