JSP-웹 페이지 구현(로그인,로그아웃)

임재헌·2023년 4월 19일
0

JSP

목록 보기
26/33

session 활용해서 로그인, 로그아웃 만들기

멤버 테이블 작성

--회원등급으로 운영
A1: 관리자
B1: 중간 관리자
C1: 우수 사용자
D1: 일반 사용자 (기본)
E1: 비회원
F1: 탈퇴한 회원

--회원테이블
CREATE TABLE member (
    id       VARCHAR(10)  NOT NULL, -- 아이디, 중복 안됨.
    passwd   VARCHAR(10)  NOT NULL, -- 패스워드
    mname    VARCHAR(20)  NOT NULL, -- 성명
    tel      VARCHAR(14)  NULL,     -- 전화번호
    email    VARCHAR(50)  NOT NULL  UNIQUE, -- 전자우편 주소, 중복 안됨
zipcode  VARCHAR(7)   NULL,     -- 우편번호, 12345
    address1 VARCHAR(255) NULL,     -- 주소 1
    address2 VARCHAR(255) NULL,     -- 주소 2(나머지주소)
    job      VARCHAR(20)  NOT NULL, -- 직업
    mlevel   CHAR(2)      NOT NULL, -- 회원 등급, A1, B1, C1, D1, E1, F1
    mdate    DATE         NOT NULL, -- 가입일    
    PRIMARY KEY (id)
);

--행 삽입
insert into member(id, passwd, mname, tel, email, zipcode, address1, address2, job, mlevel, mdate)
values('webmaster', '12341234', '웹마스터', '123-4567', 'webmaster@itwill.com'
     , '12345', '서울시 강남구 역삼동', '삼원타워4층', 'A02', 'A1', sysdate );
     
insert into member(id, passwd, mname, tel, email, zipcode, address1, address2, job, mlevel, mdate)
values('itwill', '12341234', '웹마스터', '123-4567', 'itwill@itwill.com'
     , '12345', '서울시 강남구 역삼동', '삼원타워4층', 'A02', 'D1', sysdate );  
     
insert into member(id, passwd, mname, tel, email, zipcode, address1, address2, job, mlevel, mdate)
values('korea', '12341234', '웹마스터', '123-4567', 'user1@soldesk.com'
     , '12345', '서울시 종로구 관철동', '코아빌딩8층', 'A02', 'F1', sysdate );     
    
--로그인
--아이디/비번이 일치하면 회원등급 가져오기
--비회원 탈퇴는 제외 

select mlevel
from member
where id='webmaster' and passwd='12341234' and mlevel in('A1','B1','C1','D1');

memberDAO,member DTO작성

package net.member;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import net.utility.DBClose;
import net.utility.DBOpen;

public class MemberDAO {

	private DBOpen dbopen=null;
	private Connection con=null;
	private PreparedStatement pstmt=null;
	private ResultSet rs=null;
	private StringBuilder sql=null;
	
	
	public MemberDAO() {
		dbopen=new DBOpen();
	}
	
	public String loginProc(MemberDTO dto) {
		String mlevel=null;
		try {
			con=dbopen.getConnection();
			
			sql=new StringBuilder();
			sql.append(" select mlevel ");
			sql.append(" from member ");
			sql.append(" where id=? and passwd=? ");
			sql.append(" and mlevel in('A1','B1','C1','D1') ");
			
			pstmt=con.prepareStatement(sql.toString());
			pstmt.setString(1, dto.getId());
			pstmt.setString(2, dto.getPasswd());
			
			rs=pstmt.executeQuery();
			if (rs.next()) {
				mlevel=rs.getString("mlevel");
			}
			
		} catch (Exception e) {
			System.out.println("로그인 실패"+e);
		}finally {
			DBClose.close(con,pstmt,rs);
		}
		return mlevel;
	}
	
	
}//MemberDAO

package net.member;

public class MemberDTO {
private String id;
private String passwd;
private String mname;
private String tel;
private String email;
private String zipcode; 
private String address1;
private String address2;
private String job;     
private String mlevel;   
private String mdate;

//기본 생성자 default constructor
public MemberDTO() {}

public String getId() {
	return id;
}

public void setId(String id) {
	this.id = id;
}

public String getPasswd() {
	return passwd;
}

public void setPasswd(String passwd) {
	this.passwd = passwd;
}

public String getMname() {
	return mname;
}

public void setMname(String mname) {
	this.mname = mname;
}

public String getTel() {
	return tel;
}

public void setTel(String tel) {
	this.tel = tel;
}

public String getEmail() {
	return email;
}

public void setEmail(String email) {
	this.email = email;
}

public String getZipcode() {
	return zipcode;
}

public void setZipcode(String zipcode) {
	this.zipcode = zipcode;
}

public String getAddress1() {
	return address1;
}

public void setAddress1(String address1) {
	this.address1 = address1;
}

public String getAddress2() {
	return address2;
}

public void setAddress2(String address2) {
	this.address2 = address2;
}

public String getJob() {
	return job;
}

public void setJob(String job) {
	this.job = job;
}

public String getMlevel() {
	return mlevel;
}

public void setMlevel(String mlevel) {
	this.mlevel = mlevel;
}

public String getMdate() {
	return mdate;
}

public void setMdate(String mdate) {
	this.mdate = mdate;
}

@Override
public String toString() {
	return "MemberDTO [id=" + id + ", passwd=" + passwd + ", mname=" + mname + ", tel=" + tel + ", email=" + email
			+ ", zipcode=" + zipcode + ", address1=" + address1 + ", address2=" + address2 + ", job=" + job
			+ ", mlevel=" + mlevel + ", mdate=" + mdate + "]";
}

}//MemberDTO    

공통코드 작성

ssi.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- ssi.jsp 공통 코드를 포함하는 페이지
     -->
 <%@ page import="java.sql.*" %>
 <%@ page import="java.io.*" %>
 <%@ page import="java.util.*" %>
 
 <%@ page import="net.utility.*" %>
 <%@ page import="net.member.*" %>

<jsp:useBean id="dao" class="net.member.MemberDAO" scope="page"></jsp:useBean>
<jsp:useBean id="dto" class="net.member.MemberDTO" scope="page"></jsp:useBean>

<%request.setCharacterEncoding("UTF-8");%>

authi.jsp

로그인 정보를 받아오는 session을 공통코드로 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- authi.jsp 공통 코드를 포함하는 페이지
  로그인 상태 정보 확인	-->
 <%
 String s_id="";
 String s_passwd="";
 String s_mlevel="";
 
 if(session.getAttribute("s_id")==null || session.getAttribute("s_passwd")==null || session.getAttribute("s_mlevel")==null){
 //하나라도 만족을 못하면 로그인 실패 처리
	 s_id="guest";
	 s_passwd="guest";
	 s_mlevel="E1";
 }else{
	//로그인 성공 했다면 세션 변수값 가져오기
	
	s_id=(String)session.getAttribute("s_id");
	s_passwd=(String)session.getAttribute("s_passwd");
	s_mlevel=(String)session.getAttribute("s_mlevel");
	
 }
 %>

웹페이지 작성

로그인 페이지 loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="authi.jsp" %>
<%@ include file="../header.jsp" %>


<!-- 본문 시작 -->
<h3>*로그인*</h3>
<%if(s_id.equals("guest")|| s_passwd.equals("guest") || s_mlevel.equals("E1")){ %>
<form name="loginfrm" id="loginfrm" method="post" action="loginProc.jsp" onsubmit="return loginCheck()">
<table class="table">
<tr class="success">
<td> <input type="text" name="id" id="id" placeholder="아이디" maxlength="10" required>
</td>

</tr>

<tr class="success">
<td> <input type="password" name="passwd" id="passwd" placeholder="비밀번호" maxlength="10" required>				
</td>
</tr>
<tr>
<td rowspan="2"> <input type="image" src="../images/bt_login.gif"> </td>
</tr>
</table>
</form>
<%
}else{
	//로그인 성공했다면
	out.println("<strong>"+s_id+"</strong> 님");
	out.println("<a href='logout.jsp'>[로그아웃]</a>");
	
}

%>
<!-- 본문 끝 -->

<%@ include file="../footer.jsp" %>

로그인 처리페이지 loginProc.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp" %>

<!-- 본문 시작 -->
<h3>*로그인 결과*</h3>
<%
String id =request.getParameter("id").trim();
String passwd =request.getParameter("passwd").trim();

dto.setId(id);
dto.setPasswd(passwd);

String mlevel=dao.loginProc(dto);
if(mlevel==null){
	out.println("<p>아이디 비밀번호를 확인해주세요</p>");
	out.println("<p><a href='javascript:history.back()'>재시도</a></p>");
} else {
	/* out.println("로그인 성공");
	out.print("회원등급:"+ mlevel);
	
	 */
	 
	 //다른 페이지에서도 로그인 상태정보를 공유할수 있도록 나만의 로그인 상태 ONLY ME
	 /*
	 request
	 session 이용
	 application
	  */
	 session.setAttribute("s_id", id);
	 session.setAttribute("s_passwd", passwd);
	 session.setAttribute("s_mlevel", mlevel);
	 
	 //첫 페이지 이동
	 //http://localhost:9090/myweb/index.jsp
	 String root=Utility.getRoot();		// myweb 반환
	 response.sendRedirect(root+"/notice/noticeList.jsp");//list페이지로 이동
	 //response.sendRedirect(root+"/index.jsp"); 홈으로 이동 
}

%>
<!-- 본문 끝 -->

<%@ include file="../footer.jsp" %>

로그인에 성공하는 경우 공지사항페이지로 이동하도록 설정한다


로그아웃 설정

로그인 성공하여 접속한 경우 세션값을 공통코드로 받아오고
if문을 작성하여 로그인페이지로 이동시
로그인 폼이 아닌 로그아웃이 뜨도록 loginForm.jsp 파일을 수정한다

로그아웃페이지 logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
//세션변수 제거 ->null 값
session.removeAttribute("s_id");
session.removeAttribute("s_passwd");
session.removeAttribute("s_mlevel");

//페이지 이동
response.sendRedirect("loginForm.jsp");

%>

loginForm.jsp

<%if(s_id.equals("guest")|| s_passwd.equals("guest") || s_mlevel.equals("E1")){ %>

게시글 삭제 권한 변경

게시글의 삭제권한을 등급이 "A1"인 사람만 수정할수 있도록 bbsRead.jsp파일을 수정한다

<% if(s_mlevel.equals("A1")){%>
<input type="button" value="삭제" class="btn btn-secondary"  onclick="location.href='bbsDel.jsp?bbsno=<%=bbsno%>'">

회원의 등급이 "A1"인 경우 게시글 삭제 가능

회원의 등급이 "A1"아닌 경우 게시글 삭제 불가능

0개의 댓글