6월 28일 59day
** 페이지 권한처리 중요! 판단해서 에러페이지로 보내야할지 이런것
아이디 중복 검사 / 회원변경 및 회원 탈퇴 / 로그인 값 입력받기
회원정보 저장 등
(sql)
select * from member;
update member set member_status=1 where id = 'xyz789';
commit;
-------------
webapp > security )
admin_check.jspf
<%@page import="xyz.itwill.dto.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 비로그인 상태의 사용자이거나 로그인 상태의 사용자가 관리자가 아닌 경우 에러메세지를
출력하기 위한 JSP 문서로 이동하도록 URL 주소를 전달하여 응답하는 소스코드를 저장한 JSPF 파일 --%>
<%
MemberDTO loginMember=(MemberDTO)session.getAttribute("loginMember");
if(loginMember==null || loginMember.getMemberStatus()!=9) {
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?group=error&worker=error_400'");
out.println("</script>");
return;
}
%>
login_check/jspf
<%@page import="xyz.itwill.dto.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 비로그인 상태의 사용자가 JSP 문서를 요청한 경우 에러메세지를 출력하기 위한 JSP 문서로
이동하도록 URL 주소를 전달하여 응답하는 소스코드를 저장한 JSPF 파일 --%>
<%-- => include Directive에서 사용하기 위한 파일 --%>
<%
MemberDTO loginMember=(MemberDTO)session.getAttribute("loginMember");
if(loginMember==null) {
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?group=error&worker=error_400'");
out.println("</script>");
return;
}
%>
login_returnUrl.jspf
<%@page import="java.net.URLEncoder"%>
<%@page import="xyz.itwill.dto.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 비로그인 상태의 사용자가 JSP 문서를 요청한 경우 로그인 기능을 제공하는 JSP 문서로
이동하도록 URL 주소를 전달하여 응답하는 소스코드를 저장한 JSPF 파일 --%>
<%-- => 로그인 후 요청할 JSP 문서의 URL 주소를 질의문자열로 전달 --%>
<%
//바인딩된 세션에서 권한 관련 정보의 속성값을 객체(로그인 상태의 사용자정보)로 반환받아 저장
MemberDTO loginMember=(MemberDTO)session.getAttribute("loginMember");
//비로그인 상태의 사용자가 JSP 문서를 요청한 경우 [member/member_login.jsp] 문서로 이동하기
//위한 URL 주소를 클라이언트에게 전달하여 응답
// => 로그인 후 기존 요청 JSP 문서로 이동되도록 설정
if(loginMember==null) {
//request.getRequestURI() : 요청 URL 주소에서 JSP 문서의 경로를 반환하는 메소드
String requestURI=request.getRequestURI();
//System.out.println("requestURI = "+requestURI);//requestURI = /jsp/index.jsp
//request.getQueryString() : 요청 URL 주소에서 질의문자열(QueryString)을 반환하는 메소드
String queryString=request.getQueryString();
//System.out.println("queryString = "+queryString);//requestURI = /jsp/index.jsp
String returnUrl="";
if(queryString!=null) {
returnUrl=requestURI+"?"+queryString;
} else {
returnUrl=requestURI;
}
//System.out.println("returnUrl = "+returnUrl);
//로그인 후 요청할 JSP 문서의 URL 주소를 부호화 처리하여 저장
returnUrl=URLEncoder.encode(returnUrl, "utf-8");
//로그인 후 요청할 JSP 문서의 URL 주소를 질의문자열로 전달
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()
+"/index.jsp?group=member&worker=member_login&returnUrl="+returnUrl+"';");
out.println("</script>");
return;
}
%>
webapp )
header_admin
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div id="profile">
관리자님, 환영합니다.
<a href="<%=request.getContextPath() %>/member/member_logout_action.jsp">로그아웃</a>
<a href="<%=request.getContextPath() %>/index.jsp?group=main&worker=main_page">쇼핑몰 이동</a>
</div>
<div id="logo"><a href="<%=request.getContextPath() %>/index.jsp">관리자</a></div>
<div id="menu">
<a href="#">회원관리</a>
<a href="#">게시글관리</a>
<a href="#">제품관리</a>
<a href="#">구매관리</a>
</div>
</html>
webapp > member)
member_login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 사용자로부터 로그인정보(아이디와 비밀번호)를 입력받기 위한 JSP 문서 --%>
<%-- => [로그인] 태그를 클릭한 경우 [member/member_login_action.jsp] 문서를 요청하여 이동 - 입력값(로그인정보) 전달 --%>
<%
//전달값(로그인 후 요청할 JSP 문서의 URL 주소)을 반환받아 저장
String returnUrl=request.getParameter("returnUrl");
if(returnUrl==null) {
returnUrl="";
}
//인증 실패시 세션에 저장되어 제공된 속성값을 객체로 반환받아 사용
// => [member_login.jsp] 문서에서만 사용 가능하도록 속성값을 객체로 반환받은 후 반드시 삭제
String message=(String)session.getAttribute("message");
if(message==null) {
message="";
} else {
session.removeAttribute("message");
}
String id=(String)session.getAttribute("id");
if(id==null) {
id="";
} else {
session.removeAttribute("id");
}
%>
<style type="text/css">
#space {
height: 50px;
}
.login_tag {
margin: 5px auto;
width: 300px;
}
#loginForm label {
text-align: right;
width: 100px;
float: left;
}
#loginForm ul li {
list-style-type: none;
margin-bottom: 10px;
}
#loginForm input:focus {
border: 2px solid aqua;
}
#login_btn {
margin: 0 auto;
padding: 5px;
width: 300px;
background-color: black;
color: white;
font-size: 1.2em;
cursor: pointer;
letter-spacing: 20px;
font-weight: bold;
}
#search {
margin-top: 10px;
margin-bottom: 20px;
}
#message {
color: red;
font-weight: bold;
}
a:hover {
color: blue;
text-decoration: underline;
}
</style>
<div id="space"></div>
<form id="loginForm" name="loginForm" action="<%=request.getContextPath() %>/member/member_login_action.jsp" method="post">
<input type="hidden" name="returnUrl" value="<%=returnUrl%>">
<ul class="login_tag">
<li>
<label for="id">아이디</label>
<input type="text" name="id" id="id" value="<%=id%>">
</li>
<li>
<label for="id">비밀번호</label>
<input type="password" name="passwd" id="passwd">
</li>
</ul>
<div id="login_btn">로그인</div>
<div id="search">
<a href="<%=request.getContextPath() %>/index.jsp?group=member&worker=search_id">아이디 찾기</a> |
<a href="#">비밀번호 찾기</a>
</div>
<div id="message"><%=message %></div>
</form>
<script type="text/javascript">
$("#id").focus();
$("#login_btn").click(function() {
if($("#id").val()=="") {
$("#message").text("아이디를 입력해 주세요.");
$("#id").focus();
return;
}
if($("#passwd").val()=="") {
$("#message").text("비밀번호를 입력해 주세요.");
$("#passwd").focus();
return;
}
$("#loginForm").submit();
});
</script>
member_modify_action.jsp
<%@page import="xyz.itwill.dao.MemberDAO"%>
<%@page import="xyz.itwill.util.Utility"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 회원정보를 전달받아 MEMBER 테이블에 저장된 회원정보를 변경하고 [member/member_mypage.jsp]
문서를 요청하기 위한 URL 주소를 전달하여 응답하는 JSP 문서 --%>
<%-- => 로그인 상태의 사용자만 요청 가능한 JSP 문서 --%>
<%@include file="/security/login_check.jspf" %>
<%
if(request.getMethod().equals("GET")) {
response.sendRedirect(request.getContextPath()+"/index.jsp?group=error&worker=error_400");
return;
}
//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
request.setCharacterEncoding("utf-8");
//전달값을 반환받아 저장
String id=request.getParameter("id");
String passwd=request.getParameter("passwd");
if(passwd==null || passwd.equals("")) {//비밀번호 전달값이 없는 경우
//현재 로그인 사용자의 비밀번호를 변수에 저장 - 기존 비밀번호 유지
passwd=loginMember.getPasswd();
} else {//비밀번호 전달값이 있는 경우
//전달값을 암호화 처리하여 변수에 저장 - 새로운 비밀번호 변경
passwd=Utility.encrypt(passwd);
}
String name=request.getParameter("name");
String email=request.getParameter("email");
String mobile=request.getParameter("mobile1")+"-"
+request.getParameter("mobile2")+"-"+request.getParameter("mobile3");
String zipcode=request.getParameter("zipcode");
String address1=request.getParameter("address1");
String address2=request.getParameter("address2");
//DTO 객체를 생성하여 전달값으로 필드값 변경
MemberDTO member=new MemberDTO();
member.setId(id);
member.setPasswd(passwd);
member.setName(name);
member.setEmail(email);
member.setMobile(mobile);
member.setZipcode(zipcode);
member.setAddress1(address1);
member.setAddress2(address2);
//회원정보를 전달받아 MEMBER 테이블에 저장된 회원정보를 변경하는 DAO 클래스의 메소드 호출
MemberDAO.getDAO().updateMember(member);
//바인딩 세션에 저장된 권한 관련 정보의 속성값 변경
session.setAttribute("loginMember", MemberDAO.getDAO().selectMember(id));
//페이지 이동
response.sendRedirect(request.getContextPath()+"/index.jsp?group=member&worker=member_mypage");
%>
member_remove.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>회원탈퇴 성공</h1>
member_remove_action.jsp
<%@page import="xyz.itwill.dao.MemberDAO"%>
<%@page import="xyz.itwill.util.Utility"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 비밀번호를 전달받아 MEMBER 테이블에 저장된 회원정보의 비밀번호와 비교하여 같은 경우
MEMBER 테이블에 저장된 회원정보의 회원상태를 [0]으로 변경하여 탈퇴 처리하고 [main/main_page.jsp] 문서를
요청하기 위한 URL 주소를 전달하여 응답하는 JSP 문서 --%>
<%-- => 로그인 상태의 사용자만 요청 가능한 JSP 문서 --%>
<%@include file="/security/login_check.jspf" %>
<%
if(request.getMethod().equals("GET")) {
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?group=error&worker=error_400'");
out.println("</script>");
return;
}
//전달값을 반환받아 저장 - 암호화 처리
String passwd=Utility.encrypt(request.getParameter("passwd"));
//로그인 상태의 사용자 비밀번호와 전달받은 비밀번호를 비교하여 같지 않은 경우
if(!loginMember.getPasswd().equals(passwd)) {
session.setAttribute("message", "입력하신 비밀번호가 맞지 않습니다.");
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?group=member&worker=password_confirm&action=remove'");
out.println("</script>");
return;
}
//아이디와 회원상태를 전달받아 MEMBER 테이블에 저장된 회원정보의 회원상태를 변경하는 DAO 클래스의 메소드 호출
MemberDAO.getDAO().updateMemberStatus(loginMember.getId(), 0);
//세션 무효화 처리
session.invalidate();
//페이지 이동
response.sendRedirect(request.getContextPath()+"/index.jsp?group=member&worker=member_remove");
%>
password_confirm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 회원정보변경 또는 회원탈퇴를 위한 비밀번호를 입력받기 위한 JSP 문서 --%>
<%-- => 로그인 상태의 사용자만 요청 가능한 JSP 문서 --%>
<%@include file="/security/login_check.jspf" %>
<%
//전달값(페이지 이동 관련 정보)을 반환받아 저장
// => 비밀번호를 입력받은 후 페이지 이동 관련 정보 반환
String action=request.getParameter("action");
//전달값이 없거나 잘못된 경우 - 비정상적인 요청
if(action==null || !action.equals("modify") && !action.equals("remove")) {
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?group=error&worker=error_400'");
out.println("</script>");
return;
}
String message=(String)session.getAttribute("message");
if(message==null) {
message="";
} else {
session.removeAttribute("message");
}
%>
<% if(action.equals("modify")) { %>
<p>회원정보변경을 위해 회원의 비밀번호를 입력 주세요.</p>
<% } else { %>
<p>회원탈퇴를 위해 회원의 비밀번호를 입력 주세요.</p>
<% } %>
<form method="post" name="passwordForm">
<input type="password" name="passwd">
<button type="button" onclick="submitCheck();">입력완료</button>
</form>
<p id="message" style="color: red;"><%=message %></p>
<script type="text/javascript">
passwordForm.passwd.focus();
function submitCheck() {
if(passwordForm.passwd.value=="") {
document.getElementById("message").innerHTML="비밀번호를 반드시 입력해 주세요.";
passwordForm.passwd.focus();
return;
}
<%-- 전달값에 의해 form 태그로 요청하는 JSP 문서를 구분하여 실행 --%>
<% if(action.equals("modify")) {//[회원정보변경]인 경우 %>
passwordForm.action="<%=request.getContextPath()%>/index.jsp?group=member&worker=member_modify";
<% } else {//[회원탈퇴]인 경우 %>
passwordForm.action="<%=request.getContextPath()%>/member/member_remove_action.jsp";
<% } %>
passwordForm.submit();
}
</script>
search_id.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 아이디를 검색하기 위한 정보(이름,이메일)를 입력받기 위한 JSP 문서 --%>
<%-- => [아이디 검색] 태그를 클릭한 경우 [member/search_id_display.jsp] 문서 요청 - 입력값 전달 --%>
<style type="text/css">
.search_tag {
margin: 5px auto;
width: 300px;
}
#searchForm label {
text-align: right;
width: 100px;
float: left;
}
#searchForm ul li {
list-style-type: none;
margin-bottom: 10px;
}
#searchForm input:focus {
border: 2px solid aqua;
}
#search_btn {
margin: 0 auto;
padding: 5px;
width: 200px;
background-color: black;
color: white;
font-size: 1.2em;
cursor: pointer;
font-weight: bold;
}
#message {
color: red;
font-weight: bold;
}
</style>
<h1>아이디 찾기</h1>
<form id="searchForm" name="loginForm" action="<%=request.getContextPath() %>/index.jsp?group=member&worker=search_id_display" method="post">
<ul class="search_tag">
<li>
<label for="name">이름</label>
<input type="text" name="name" id="name">
</li>
<li>
<label for="email">이메일</label>
<input type="text" name="email" id="email">
</li>
</ul>
<div id="search_btn">아이디 검색</div>
<div id="message"></div>
</form>
<script type="text/javascript">
$("#name").focus();
$("#search_btn").click(function() {
if($("#name").val()=="") {
$("#message").text("이름을 입력해 주세요.");
$("#name").focus();
return;
}
if($("#email").val()=="") {
$("#message").text("이메일을 입력해 주세요.");
$("#email").focus();
return;
}
$("#searchForm").submit();
});
</script>
search_id_display.jsp
<%@page import="xyz.itwill.dao.MemberDAO"%>
<%@page import="xyz.itwill.dto.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 아이디 검색 관련 정보를 전달받아 MEMBER 테이블에 저장된 회원정보의 아이디를 검색하여
클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%
if(request.getMethod().equals("GET")) {
out.println("<script type='text/javascript'>");
out.println("location.href='"+request.getContextPath()+"/index.jsp?group=error&worker=error_400'");
out.println("</script>");
return;
}
//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
// => 템플릿 페이지 몸체부에 포함되는 JSP 문서에서는 request 객체의 정보 변경 불가능
// => 템플릿 페이지(index.jsp)에서 request 객체의 정보 변경
//request.setCharacterEncoding("utf-8");
//전달값을 반환받아 저장
String name=request.getParameter("name");
String email=request.getParameter("email");
//DTO 객체를 생성하여 전달값으로 필드값 변경
MemberDTO member=new MemberDTO();
member.setName(name);
member.setEmail(email);
//회원정보(아이디와 이름)를 전달받아 MEMBER 테이블에 저장된 회원정보의 아이디를 검색하여
//문자열(String 객체)로 반환하는 DAO 클래스의 메소드 호출
String id=MemberDAO.getDAO().selectMemberId(member);
%>
<h1>아이디 검색 결과</h1>
<% if(id!=null) {//검색 결과가 있는 경우 %>
<p style="font-size: 1.5em;"><%=name %>님의 아이디는 [<%=id %>]입니다.</p>
<% } else { %>
<p style="font-size: 1.5em;"><%=name %>님의 아이디를 찾을 수 없습니다.</p>
<% } %>