๐ป์ธ์ฆ๊ณผ ํ๊ฐ
์ธ์ฆ, Authentication
- ํ์ฌ ์ ์์๊ฐ ํด๋น ์ฌ์ดํธ์ ๊ตฌ์ฑ์์ธ์ง ํ์ธํ๋ ์์
- ๋ก๊ทธ์ธ(Sign in), ๋ก๊ทธ์์(Sign out)
- ํด๋น ์ ์์๊ฐ ๊ตฌ์ฑ์์ธ์ง ์์ด๋์ ์ํธ๋ก ํ์ธํ๋ ์์ ์ ํต๊ณผํ๋ฉด ์ธ์ฆ ํฐ์ผ์ ๋ฐ๊ธํ๋ค.
- ์ธ์ฆ ํฐ์ผ์ผ๋ก ์ฌ์ดํธ ๋ด์์ ์์ ๋กญ๊ฒ ์ด๋์ด ๊ฐ๋ฅํ๊ณ ์ธ์ฆ ๋ฐ์ ์ฌ๋์ด๋ผ๋ ๊ฒ์ ์ฆ๋ช ๊ฐ๋ฅํ๋ค.
ํ๊ฐ, Authorization
- ํน์ ํ๋์ ํ ๋ ๊ถํ์ด ์๋์ง ํ์ธํ๋ ์์
์น ๋ณด์์ ์ธ์ฆ๊ณผ ํ๊ฐ๋ฅผ ํฉ์ณ์ ๊ด๋ฆฌํ๋ค.
์ธ์ฆ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์๋ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ๋ฒ๊ณผ ์ฟ ํค ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ๋ฒ์ด ์๋ค.
๐ป์ธ์ฆ ์ ๋ฌด ๊ตฌํ(๋ก๊ทธ์ธ ๋ฐ ๊ถํ ์๋ ํ์ด์ง ๋ง๋ค๊ธฐ)
- ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ๋ค.
- ํ๋ก์ ํธ ๋ช : AuthTest
ํด๋ ๊ฒฝ๋ก | ํ์ผ๋ช | ํ์ผ ์ญํ |
AuthTest | script.sql | sql ๊ตฌ๋ฌธ์ ์์ฑํ๋ ํ์ผ |
WEB-INF > lib | ojdbc6.jar | |
webapp | index.jsp | ์์ ํ์ด์ง |
webapp > auth | login .jsp | ๋ก๊ทธ์ธ ํผ ํ์ด์ง |
webapp > auth | loginok.jsp | ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ํ์ด์ง(+ ์ธ์ฆ ์์ ) |
webapp > auth | logoutok.jps | ๋ก๊ทธ์์ ์ฒ๋ฆฌ ํ์ด์ง |
webapp > member | member.jsp | ํ์ ์ ์ฉ ํ์ด์ง(+ํ๊ฐ ์์ ) |
webapp > admin | admin.jsp | ๊ด๋ฆฌ์ ์ ์ฉ ํ์ด์ง(+ํ๊ฐ ์์ ) |
com.test.auth | DBUtil.java | DBUtil.java |
sql ๊ตฌ๋ฌธ ์์ฑ
sql๊ตฌ๋ฌธ์ sql ํด๋ก ๋ฏธ๋ฆฌ ์์ฑํ๋ฉด ๋์ค์ JSP์์ sql๊ตฌ๋ฌธ ์กฐ์ํ๊ธฐ ํธํ๋ค.
script.sql
-- AuthTest > script.sql
select * from tblUser;
create table tblUser (
id varchar2(30) primary key, -- ์์ด๋(PK)
pw varchar2(30) not null, -- ์ํธ
name varchar2(30) not null, -- ์ด๋ฆ
lv number(1) not null -- ๋ฑ๊ธ(1-์ผ๋ฐ, 2-๊ด๋ฆฌ์)
);
insert into tblUser values ('hong', '1111', 'ํ๊ธธ๋', 1);
insert into tblUser values ('test', '1111', 'ํ
์คํธ', 1);
insert into tblUser values ('admin', '1111', '๊ด๋ฆฌ์', 2);
select * from tblUser where id = 'hong' and pw = '1111';
commit;
sql๊ตฌ๋ฌธ์ sql ํด๋ก ๋ฏธ๋ฆฌ ์์ฑํ๋ฉด ๋์ค์ JSP์์ sql๊ตฌ๋ฌธ ์กฐ์ํ๊ธฐ ํธํ๋ค.
์์ํ์ด์ง
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์ธ์ฆ/ํ๊ฐ</title>
<link rel="stylesheet" href="http://pinnpublic.dothome.co.kr/cdn/example-min.css">
</head>
<body>
<h1>์ธ์ฆ/ํ๊ฐ</h1>
<% if(session.getAttribute("auth") == null) {%>
<fieldset>
<input type="button" value="๋ก๊ทธ์ธ" onclick = "location.href='auth/login.jsp';">
</fieldset>
<% } else { %>
<fieldset>
<input type="button" value="๋ก๊ทธ์์" onclick = "location.href='auth/logoutok.jsp';">
<div class="message">
<div>์์ด๋: <%= session.getAttribute("auth") %> </div>
<div>์ด๋ฆ: <%= session.getAttribute("name") %> </div>
<div>๋ฑ๊ธ: <%=session.getAttribute("lv").toString().equals("1")?"์ผ๋ฐํ์":"๊ด๋ฆฌ์" %></div>
</div>
</fieldset>
<% } %>
<hr>
<!-- ํ์ ์ ์ฉ ํ์ด์ง -->
<!-- ๋
ธ์ถ ์ ๋ฌด ๋ฐฉ๋ฒ 1 : ๋์คํ๋ ์ด ๋
ธ์ถ ์ ๋ฌด๋ฅผ -->
<% if(session.getAttribute("auth") != null) { %>
<div><a href="member/member.jsp">ํ์ ํ์ด์ง</a></div>
<% } %>
<%--
<!-- ๋
ธ์ถ ์ ๋ฌด ๋ฐฉ๋ฒ 2 : ๊ธฐ๋ฅ ์ฐจ์ด๋ฅผ ๋๋ค.-->
<% if(session.getAttribute("auth") != null) { %>
<div><a href="member/member.jsp">ํ์ ํ์ด์ง</a></div>
<% } else { %>
<!-- ํ์์ด ์๋ ์ฌ๋ -->
<!-- #!๋ก ๊ณต์ํ๋ฅผ ๋ง๋ ๋ค -->
<a href="#!" onclick = "alert('๋ก๊ทธ์ธํ ํ์๋ง ์ ๊ทผ๊ฐ๋ฅํฉ๋๋ค.');">ํ์ ํ์ด์ง</a>
<%} %>
--%>
<!-- ๊ด๋ฆฌ์ ์ ์ฉ ํ์ด์ง -->
<% if (session.getAttribute("auth") != null && session.getAttribute("lv").toString().equals("2")) { %>
<div><a href="admin/admin.jsp">๊ด๋ฆฌ์ ํ์ด์ง</a></div>
<% } %>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="http://pinnpublic.dothome.co.kr/cdn/example-min.js"></script>
</body>
</html>
์ธ์ ๊ฐ์ฒด์ auth ์์ฑ์ ํ์ฉํ์ฌ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ํ์ ํ ์ ์๋ค.
๋ง์ฝ auth ์์ฑ์ด null์ด๋ผ๋ฉด, ์ฌ์ฉ์๋ ๋ก๊ทธ์ธํ์ง ์์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ ์ด๋ ๋ก๊ทธ์ธ ๋ฒํผ์ด ํ๋ฉด์ ์ถ๋ ฅ๋๋ค.
๋ฐ๋ฉด, auth ์์ฑ์ด null์ด ์๋ ๊ฒฝ์ฐ, ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ ํ ์ํ์ด๋ค. ์ด๋๋ ๋ก๊ทธ์์ ๋ฒํผ๊ณผ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ํ๋ฉด์ ํ์๋๋ค.
๋ํ, ํ์ ๋ฐ ๊ด๋ฆฌ์ ํ์ด์ง์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๊ธฐ ์ํด auth ์์ฑ์ ํ์ฉํ๋ค. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ๊ฒฝ์ฐ์๋ง ํด๋น ํ์ด์ง๋ก์ ์ ๊ทผ์ด ํ์ฉ๋๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ์ ๊ทผํ ์ ์๋ค.
์ด๋ฌํ ์ ๊ทผ ์ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ก๊ทธ์ธํ ๊ฒฝ์ฐ์๋ง ํ์ ํ์ด์ง๋ก์ ์ ๊ทผ์ ํ์ฉํ๋ ๋ฒํผ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค. ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ก๊ทธ์ธ ์ ํ ๋ฒํผ์ด ๋ณด์ฌ์ง์ง๋ง ๋ก๊ทธ์ธ ์ ๋ฒํผ์ ๋๋ ์ ๋, ์ด๋ํ์ง์๊ณ ์๋ด๋ฉ์์ง๋ง ๋์ด์ฃผ๋ ์ด๋ฅธ๋ฐ ๊ณต์ํ๋ฅผ ๋์ฐ๋ ๊ฒ์ด๋ค. aํ๊ทธ ๋งํฌ์ "#!"๋ฅผ ๋ฃ์ผ๋ฉด ๊ณต์ํ๊ฐ ๋๋ค.
๋ก๊ทธ์ธ ํผ ํ์ด์ง
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>๋ก๊ทธ์ธ</title>
<link rel="stylesheet" href="http://pinnpublic.dothome.co.kr/cdn/example-min.css">
</head>
<body>
<h1>๋ก๊ทธ์ธ</h1>
<form method="POST" action="loginok.jsp">
<table class="vertical">
<tr>
<th>์์ด๋</th>
<td><input type="text" name="id" required></td>
</tr>
<tr>
<th>์ํธ</th>
<td><input type="password" name="pw" required></td>
</tr>
</table>
<div>
<input type="submit" value="๋ก๊ทธ์ธ">
</div>
</form>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="http://pinnpublic.dothome.co.kr/cdn/example-min.js"></script>
</body>
</html>
๋ก๊ทธ์ธ ์ฒ๋ฆฌ ํ์ด์ง
loginok.jsp
<%@page import="com.test.auth.DBUtil"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.
String id = request.getParameter("id");
String pw = request.getParameter("pw");
//2.
Connection conn = null;
PreparedStatement stat = null;
ResultSet rs = null;
try {
conn = DBUtil.open();
String sql = "select * from tblUser where id = ? and pw = ?";
stat = conn.prepareStatement(sql);
stat.setString(1, id);
stat.setString(2, pw);
rs = stat.executeQuery();
if (rs.next()) {
//ํด๋น ๊ตฌ๋ฌธ์์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ๋๋ธ๋ค. ๋ค๋ฅธ ๊ณณ์์ ์์ฑํ์ง ์๋๋ค.
session.setAttribute("auth", id); // ์ธ์ฆ ํฐ์ผ ์ญํ
session.setAttribute("name", rs.getString("name"));
session.setAttribute("lv", rs.getString("lv"));
response.sendRedirect("../index.jsp");
} else {
System.out.println("๋ก๊ทธ์ธ ์คํจ");
response.sendRedirect("login.jsp");
}
rs.close();
stat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="http://pinnpublic.dothome.co.kr/cdn/example-min.css">
</head>
<body>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="http://pinnpublic.dothome.co.kr/cdn/example-min.js"></script>
</body>
</html>
๋ก๊ทธ์ธ ์ฒ๋ฆฌํ์ด์ง์์๋ ์ด 4๊ฐ์ง์ ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ค.
1. login.jsp์์ ๋์ด์จ id,pw ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค.
2. DB์ ํด๋น id,pw ๊ฐ ์๋ ํ์์ ์กฐํํ๋ค.(select)
3. ์กด์ฌํ๋ฉด ์ธ์ฆ ํฐ์ผ์ ๋ฐ๊ธํ๊ณ ์กด์ฌํ์ง์์ผ๋ฉด ์๋ฌด์ผ์ด ๋ฐ์ํ์ง ์๋๋ค.
4. ์ฌ์ฉ์์๊ฒ ํผ๋๋ฐฑ์ ํ๋ค.
session.setAttribute("auth", id);
3๋ฒ์ ์ธ์ฆ ํฐ์ผ ์ญํ ์ session์ auth ์์ฑ์ ์ง์ ํ๋ ๊ฒ์ด๋ค.
DB๊ฒฐ๊ณผ ๋ฐํ ํ ํ์์ด ์กด์ฌํ๋ค๋ฉด session์ auth ์์ฑ์ id๋ก ์ ์ฅํ์ฌ ์ธ์ฆ ํฐ์ผ์ ๋ฐ๊ธํ๋ค. ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ค๋ ํ์๋ก ํ์์ด ๋ค๋ฅธ ํ์ด์ง๋ฅผ ์ ์ํ์ ๋, session์ auth ์์ฑ์ ํ์ธํ๋ฉด ๊ทธ ํ์ด์ง์ ๊ถํ์ด ์๋ค๋ ๊ฒ์ ์ฆ๋ช ํ๋ ์ธ์ฆ ํฐ์ผ์ด ๋๋ ๊ฒ์ด๋ค.
๋จ, ์ธ์ ์ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ํ์ํ ์ ๋ณด๋ง session ๊ฐ์ฒด์ ๋ฃ์ด์ผํ๋ค.
๋ก๊ทธ์์ ์ฒ๋ฆฌ ํ์ด์ง
logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.removeAttribute("auth"); //๋ก๊ทธ์์
response.sendRedirect("../index.jsp");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="http://pinnpublic.dothome.co.kr/cdn/example-min.css">
</head>
<body>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="http://pinnpublic.dothome.co.kr/cdn/example-min.js"></script>
</body>
</html>
๋ก๊ทธ์์ ์ฒ๋ฆฌํ์ด์ง์์๋ 2๊ฐ์ง ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ค.
1. ๋ก๊ทธ์์ ์ฒ๋ฆฌ
2. ํผ๋๋ฐฑ
session.removeAttribute("auth");
session์ auth ์์ฑ์ ์ง์ฐ๋ฉด ๋ก๊ทธ์์ ์ฒ๋ฆฌ๊ฐ ๋๋ ๊ฒ์ด๋ค.
๋ก๊ทธ์ธ์ ์ธ์ฆ ํฐ์ผ์ ์์ ํ๊ณ ์๋ ์ํ์ด๊ณ ๋ก๊ทธ์์์ ์ธ์ฆ ํฐ์ผ์ ์์ ํ๊ธฐ ์ ์ธ ์ํ์ด๋ฏ๋ก ์ธ์ฆ ์ ์ํ๋ก ๋๋๋ฆฐ๋ค.
ํ์ ํ์ด์ง
member.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
if (session.getAttribute("auth") == null) {
//response.sendRedirect("../index.jsp"); // ๋ฐ๋ก ๋ด์ซ๋๊ฑด ๋ถ์น์ ํด๋ณด์
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("</head>");
out.println("<body>");
out.println("<script>");
out.println("alert('ํ์๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.');");
out.println("location.href='../index.jsp';");
out.println("</script>");
out.println("</body>");
out.println("</html>");
out.close(); // ์๋์ ์ฝ๋๋ฅผ ์งํํ์ง ์๊ณ ์ฌ๊ธฐ์ ์ค๋จํ๋ค.
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="http://pinnpublic.dothome.co.kr/cdn/example-min.css">
</head>
<body>
<h1>ํ์ ์ ์ฉ ํ์ด์ง</h1>
<p>์ด ํ์ด์ง๋ ํ์๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.</p>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="http://pinnpublic.dothome.co.kr/cdn/example-min.js"></script>
</body>
</html>
์ธ์ฆ๋ฐ์ง ๋ชปํ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๊ทผํ๋ฉด ํ์ด์ง๊ฐ ๋ณด์ด์ง์๊ฒ ํด์ผํ๋ค.
๋ณด์ด์ง์๊ฒ ํ๋๊ฑด ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ง๋ง ๋ฐ๋ก ์์ํ์ด์ง๋ก ์ด๋์ํค๋๊ฑด ๋ถ์น์ ํด๋ณด์ด๊ธฐ๋๋ฌธ์ ์๋ด๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
์๋ body์์ญ์ ํ์๋ง ๋ณด๋ ํ์ด์ง์ด๊ธฐ์ ์ธ์ฆ ๊ฒ์ฆ์ ํ ๋๋ ๋ณดํต ์คํฌ๋ฆฝํธ๋ฆฟ ์์ญ์์์ ์์ฑํ๋ค.
๊ด๋ฆฌ์ ํ์ด์ง
admin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
if (session.getAttribute("auth") == null || session.getAttribute("lv").toString().equals("1")) {
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("</head>");
out.println("<body>");
out.println("<script>");
out.println("alert('๊ด๋ฆฌ์๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.');");
out.println("location.href='../index.jsp';");
out.println("</script>");
out.println("</body>");
out.println("</html>");
out.close(); // ์๋์ ์ฝ๋๋ฅผ ์งํํ์ง ์๊ณ ์ฌ๊ธฐ์ ์ค๋จํ๋ค.
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="http://pinnpublic.dothome.co.kr/cdn/example-min.css">
<style>
</style>
</head>
<body>
<h1>๊ด๋ฆฌ์ ํ์ด์ง</h1>
<p>์ด ํ์ด์ง๋ ๊ด๋ฆฌ์๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.</p>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="http://pinnpublic.dothome.co.kr/cdn/example-min.js"></script>
</body>
</html>
๊ด๋ฆฌ์ ํ์ด์ง๋ ํ์ ํ์ด์ง์ ๊ฐ์ด ์ ์ฉํ์ด์ง๋ฅผ ์ง์ ์ ๊ทผํ์ ๋ ์ธ์ฆ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ํ์ด์ง๋ฅผ ์ถ๋ ฅํ๋ค.
'JDBC(Oracle)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JDBC] Statement ๊ฐ์ฒด์ PrearedStatement, CallableStatement (0) | 2023.10.20 |
---|---|
[JDBC] SQL ์คํ ๋ด๋น : Statement ๊ฐ์ฒด (0) | 2023.10.20 |
[JDBC] JDBC ๋ฆฌํฉํ ๋ง (0) | 2023.10.20 |
[JDBC] JDBC ๊ธฐ์ด, ์ดํด๋ฆฝ์ค์ ์ฐ๊ฒฐํ๊ธฐ (0) | 2023.10.19 |