--회원등급으로 운영
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');
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
<%@ 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");%>
로그인 정보를 받아오는 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");
}
%>
<%@ 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" %>
<%@ 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 파일을 수정한다
<%@ 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");
%>
<%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"아닌 경우 게시글 삭제 불가능