일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- String char[] 형변환
- include액션태그
- 스레드그룸
- StringWriter
- include 지시자
- first-child
- isinterrupted()
- MemoryStream
- Linux셋팅
- 상관서브쿼리
- interrupt()
- first-of-child
- Linux세팅
- 리눅스세팅
- 상관 서브 쿼리
- StringReader
- ThreadGroup()
- sleep()메소드
- 동기화
- 리눅스셋팅
- Daemon()
- char[] String 형변환
- include지시자
- 메모리스트림
- ID중복
- interrupted()
- 표현 언어
- 아이디중복
- ObjectInputStream
- InputDialog
- Today
- Total
다연이네
[days07] 세션을 사용해서 로그인 처리(상태 관리)(회원/비회원/관리자) 본문
[ 세션을 사용해서 로그인 처리(상태 관리) ]
쿠키를 사용했을 때와 똑같은 코딩을 세션으로 바꿔보기!!
1. ex06_default .jsp
메인 페이지
로그인 + 로그아웃
id/passwd
2. ex06_logon.jsp
입력받은 id/password 인증 처리
- 로그인 성공 : auth 쿠키이름으로 id 저장
- 로그인 실패 : ex06_default.jsp?error (메인 페이지) 이동
3. ex06_board .jsp 게시판 관련 페이지
- 로그인 하지 않은 사용자라면 게시글 목록 보기 (권한부여)
- 로그인 인증 + 일반 사용자 : 글쓰기 (권한부여)
+ 관리자 : 글쓰기, 수정, 삭제 (권한부여)
4. ex06_logout.jsp
- 로그아웃 버튼을 클릭할 때 auth 쿠키 삭제
- ex06_default.jsp 메인 페이지로 이동
1.저장 - 로그인 id/passwd session.setAttribute("")
2. 가져오기 - session.getAttribute("auth")
EL로 가져오기 - sessionScope.auth
3. 로그아웃
session.invalidate()
4. 서블릿 session 객체를 사용하는 방법
HttpSession session = reqquest.getSession(true/false);
-차이점-
false null 반환
true 새로운 세션 객체를 생성해 반환
ex06.default.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="ex06_auth.jspf" %>
<!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(auth==null){
%>
<div id="logon">
<form action="ex06_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">
[<%=auth %>]님 환영합니다.<br>
<a href="ex06_logout.jsp">로그아웃</a>
</div>
<%
}
%>
<!-- 인증, 권한 따라 사용할 메뉴 처리 -->
<!-- 게시판과 공지사항은 인증/권한 없이 사용 가능 -->
<a href="ex06_board.jsp">게시판</a><br>
<a href="ex06_notice.jsp">공지사항</a><br>
<%
if(auth!=null){ //로그인 되어졌음 (인증O)
%>
<a href="#">일정관리</a><br>
<a href="#">자료실</a><br>
<%
if(auth.equals("관리자")){
%>
<a href="#">사원관리-(관리자 권한)</a><br>
<a href="#">급여관리-(관리자 권한)</a><br>
<%
}
}
%>
</body>
</html>
위 코딩을 jstl로 바꾸자 ( <c:if~ )
- 가독성 상승
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="ex06_auth.jspf" %>
<!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>
<c:if test="${empty auth }">
<div id="logon">
<form action="ex06_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>
<!-- EL empty 연산자 null, '' 모두 true -->
<!-- ?error -->
<c:if test="${param.error eq ''}">
<span style="color: red">로그인 실패했습니다.</span>
</c:if>
</form>
</div>
</c:if>
<c:if test="${not empty auth }">
<div id="logout">
[<%=auth %>]님 환영합니다.<br>
<a href="ex06_logout.jsp">로그아웃</a>
</div>
</c:if>
<!-- 인증, 권한 따라 사용할 메뉴 처리 -->
<!-- 게시판과 공지사항은 인증/권한 없이 사용 가능 -->
<a href="ex06_board.jsp">게시판</a><br>
<a href="ex06_notice.jsp">공지사항</a><br>
<c:if test="${not empty auth }">
<a href="#">일정관리</a><br>
<a href="#">자료실</a><br>
<c:if test='${auth eq "관리자" }'>
<a href="#">사원관리-(관리자 권한)</a><br>
<a href="#">급여관리-(관리자 권한)</a><br>
</c:if>
</c:if>
</body>
</html>
ex06_logon.jsp
<%@page import="java.util.HashMap"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
//member 컬렉션
HashMap<String, String> member = new HashMap<>();
member.put("admin","1234"); //관리자 권한
member.put("hong","1234"); //일반 권한
member.put("park","1234"); //일반 권한
//위가 db라고 가정 (시간관계상)
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
if(id.equals("admin")&&passwd.equals("1234")){
session.setAttribute("auth", "관리자");
response.sendRedirect("ex06_default_el_jstl.jsp");
}else if(id.equals("hong")&&passwd.equals("1234")){
session.setAttribute("auth", id);
response.sendRedirect("ex06_default_el_jstl.jsp");
}else if(id.equals("park")&&passwd.equals("1234")){
session.setAttribute("auth", id);
response.sendRedirect("ex06_default_el_jstl.jsp");
}else{
response.sendRedirect("ex06_default_el_jstl.jsp?error");
}
%>
ex06_auth.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
//auth.jspf
String auth = null;
String name= "auth";
// "auth"란 속성명으로 세션에 저장된 값을 읽어와서 auth 변수에 저장
auth = (String)session.getAttribute(name);
%>
ex06_logout.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="ex06_auth.jspf" %>
<%
//세션 객체 제거하면서 모든 세션에 저장된 속성들도 제거
session.invalidate();
%>
<script>
alert("[<%=auth%>]님 로그아웃 되었습니다.");
location.href="ex06_default_el_jstl.jsp";
</script>
ex06_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="ex06_auth.jspf" %>
<!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>
</style>
<script>
$(document).ready(function (){
});
</script>
</head>
<body>
<a href="ex06_default_el_jstl.jsp">Home</a>
<br />
<a href="ex06_list.jsp">글목록</a>
<!--
글쓰기 - 일반 권한, 관리자 권한
글수정, 삭제 - 관리자 권한
-->
<c:if test="${not empty auth }">
<a href="#">글쓰기</a>
<c:if test='${auth eq "관리자" }'>
<a href="#">글수정</a>
<a href="#">글삭제</a>
</c:if>
</c:if>
</body>
</html>
로그인 정보를 세션에 저장한다면 금방처럼 로그인ID 만을 auth 속성명으로 하나만 저장할 일은 잘 없다.
나중에 저장하더라도 로그인한 계정에 여러가지 정보(계정명, 권한, 기타 등등)를 저장하는 일을 앞으로 많이 할 것이다.
<%
session.setAttribute("name", value);
session.setAttribute("authenticate", value);
session.setAttribute("age", value);
session.setAttribute("tel", value);
session.setAttribute("address", value);
%>
위처럼 하나 하나 하지 않고 객체로 저장할 것
<%
EmpDTO dto = new EmpDTO(7566,"SMITH","Manager",8977, null, 800,0,10);
session.setAttribute("user", dto);
//프로젝트 - 장바구니 이렇게 객체로
%>
사용할때는
<%
EmpDTO user = (EmpDTO)session.getAttribute("user");
%>
로그인 사원명 : <%=user.getEname() %><br>
로그인 사원번호 : <%=user.getEmpno() %><br>
<body>
<%
/*
session.setAttribute("name", value);
session.setAttribute("authenticate", value);
session.setAttribute("age", value);
session.setAttribute("tel", value);
session.setAttribute("address", value);
*/
EmpDTO dto = new EmpDTO(7566,"SMITH","Manager",8977, null, 800,0,10);
session.setAttribute("user", dto);
%>
<!-- 사용할때는 -->
<%
EmpDTO user = (EmpDTO)session.getAttribute("user");
%>
로그인 사원명 : <%=user.getEname() %><br>
로그인 사원번호 : <%=user.getEmpno() %><br>
</body>
<%
//세션 객체를 제거 (여러 속성도 모두 삭제)
session.invalidate();
//user 속성만 제거
session.removeAttribute("user");
%>
'JSP' 카테고리의 다른 글
[days07] 표준 태그 라이브러리(JSTL) (0) | 2021.01.04 |
---|---|
[days07] EL(표현 언어) (0) | 2021.01.04 |
[days07] 세션(Session) (0) | 2021.01.04 |
[days07] 커넥션 풀 (Connection Pool) (0) | 2021.01.04 |
[days07] 쿠키를 사용해 로그인 처리(상태관리)(회원/비회원/관리자) (0) | 2021.01.04 |