더보기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<% 
	//request.setCharacterEncoding("UTF-8");  //한글깨지면 주석제거
	//request.setCharacterEncoding("EUC-KR");  //해당시스템의 인코딩타입이 EUC-KR일경우에
	String inputYn = request.getParameter("inputYn"); 
	String roadFullAddr = request.getParameter("roadFullAddr"); 

%>
</head>
<script>
// opener관련 오류가 발생하는 경우 아래 주석을 해지하고, 사용자의 도메인정보를 입력합니다. ("주소입력화면 소스"도 동일하게 적용시켜야 합니다.)
// document.domain = "abc.go.kr";

/*
		모의 해킹 테스트 시 팝업API를 호출하시면 IP가 차단 될 수 있습니다. 
		주소팝업API를 제외하시고 테스트 하시기 바랍니다.
*/

function init(){
	var url = location.href; // 자기주소  ~/jusoPopup.jsp
	var confmKey = "devU01TX0FVVEgyMDIwMDYwMjA5NDkwMjEwOTgyMDE=";
	var resultType = "4"; // 도로명주소 검색결과 화면 출력내용, 1 : 도로명, 2 : 도로명+지번, 3 : 도로명+상세건물명, 4 : 도로명+지번+상세건물명
	var inputYn= "<%=inputYn%>";
	if(inputYn != "Y"){
		document.form.confmKey.value = confmKey;
		document.form.returnUrl.value = url;
		document.form.resultType.value = resultType;
		document.form.action="http://www.juso.go.kr/addrlink/addrLinkUrl.do"; //인터넷망
		//document.form.action="http://www.juso.go.kr/addrlink/addrMobileLinkUrl.do"; //모바일 웹인 경우, 인터넷망
		document.form.submit();
		
		// 서버로 부터 응답 받으면 무조건 새창이다(html 새로 로딩됨)
		
	}else{
		opener.jusoCallBack("<%=roadFullAddr%>");
		window.close();
	}
}
</script>
<body onload="init();">
	<form id="form" name="form" method="post">
		<input type="hidden" id="confmKey" name="confmKey" value=""/>
		<input type="hidden" id="returnUrl" name="returnUrl" value=""/>
		<input type="hidden" id="resultType" name="resultType" value=""/>
		<!-- 해당시스템의 인코딩타입이 EUC-KR일경우에만 추가 START-->
		<!-- 
		<input type="hidden" id="encodingType" name="encodingType" value="EUC-KR"/>
		 -->
		<!-- 해당시스템의 인코딩타입이 EUC-KR일경우에만 추가 END-->
	</form>
</body>
</html>

 

 

변수값들은 파라미터를 받아오지 못했기 때문에 최초에 null이다

 

inputYn이 Y가 아니면 www.juso.go.kr/addrlink/addrLinkUrl.do 

로 이동한다.

해당주소에서 입력하면 다시 jusoPopup으로 가서 roadFullAddr 을 원래페이지에 리턴해준다

 

 

 

 

 

 

 

 

 

 

 

'Web > Jsp' 카테고리의 다른 글

200603 // 블로그 blog 만들기 5 / get, post 받는 방식 / JSTL  (0) 2020.06.03
JSTL 다운로드  (0) 2020.06.03
200602 // blog 블로그 만들기 4  (0) 2020.06.02
블로그 만들기 3  (0) 2020.06.01
쿠키와 세션  (0) 2020.06.01

 

버튼타입을 꼭 기입하자

적지 않으면 다른 input의 유효성체크를 한다

JSP주석처리 ctrl shift c

-------------------

암호화 : 이름

복호화가 되는 것인지 -> Base64

복호화가 안되는 것인지 -> 해시, SHA256, MD5

복호화 안되는 것들 중에서 SHA256을 많이 쓴다

 

1. 주소라이브러리

2. AJAX

3. 게시글 작성 - JSTL / 섬머노트

-----------------------------------------

 

 

 

 

 

 

 

테스트에 넣기

 

 

 

 

 

-

코드예시

더보기

join

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

<script>

function goPopup(){
	// 주소검색을 수행할 팝업 페이지를 호출합니다.
	// 호출된 페이지(jusopopup.jsp)에서 실제 주소검색URL(http://www.juso.go.kr/addrlink/addrLinkUrl.do)를 호출하게 됩니다.
	var pop = window.open("/blog/juso/jusoPopup.jsp","pop","width=570,height=420, scrollbars=yes, resizable=yes"); 
	
	// 모바일 웹인 경우, 호출된 페이지(jusopopup.jsp)에서 실제 주소검색URL(http://www.juso.go.kr/addrlink/addrMobileLinkUrl.do)를 호출하게 됩니다.
    //var pop = window.open("/popup/jusoPopup.jsp","pop","scrollbars=yes, resizable=yes"); 
}

function jusoCallBack(roadFullAddr){
	// 팝업페이지에서 주소입력한 정보를 받아서, 현 페이지에 정보를 등록합니다.
	
	//document.getElementById("address").value = roadFullAddr; -> 잘됨
	
	//document.myForm.address.value = roadFullAddr; -> 잘됨
	
	var temp = document.querySelector("#address");
	temp.value = roadFullAddr;
	
}

</script>

<div class="container">
	<form action="/blog/user?cmd=joinProc" method="post" class="was-validated">
  <div class="form-group">
	    <label for="username">Username:</label>
	    <input type="text" class="form-control" id="username" placeholder="Enter username" name="username" required>
	    <div class="valid-feedback">Valid.</div>
	    <div class="invalid-feedback">Please fill out this field.</div>
  </div>
  
  <div class="form-group">
	    <label for="password">Password:</label>
	    <input type="password" class="form-control" id="password" placeholder="Enter password" name="password" required>
	    <div class="valid-feedback">Valid.</div>
	    <div class="invalid-feedback">Please fill out this field.</div>
  </div>
  
   <div class="form-group">
	    <label for="email">Email:</label>
	    <input type="email" class="form-control" id="email" placeholder="Enter email" name="email" required>
	    <div class="valid-feedback">Valid.</div>
	    <div class="invalid-feedback">Please fill out this field.</div>
  </div>
  
  <div class="form-group">
	    <label for="address">Address:</label>
	    
	    <input type="button" onClick="goPopup();" value="주소검색" class="btn btn-primary btn-sm"/> <!-- 추가 -->
	    
	    <input type="text" class="form-control" id="address" placeholder="Enter address" name="address" required>
	    <div class="valid-feedback">Valid.</div>
	    <div class="invalid-feedback">Please fill out this field.</div>
  </div>

  <button type="submit" class="btn btn-primary">회원가입 완료</button>
</form>
</div>

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

 

jusoPopup

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<% 
	//request.setCharacterEncoding("UTF-8");  //한글깨지면 주석제거
	//request.setCharacterEncoding("EUC-KR");  //해당시스템의 인코딩타입이 EUC-KR일경우에
	String inputYn = request.getParameter("inputYn"); 
	String roadFullAddr = request.getParameter("roadFullAddr"); 

%>
</head>
<script>
// opener관련 오류가 발생하는 경우 아래 주석을 해지하고, 사용자의 도메인정보를 입력합니다. ("주소입력화면 소스"도 동일하게 적용시켜야 합니다.)
// document.domain = "abc.go.kr";

/*
		모의 해킹 테스트 시 팝업API를 호출하시면 IP가 차단 될 수 있습니다. 
		주소팝업API를 제외하시고 테스트 하시기 바랍니다.
*/

function init(){
	var url = location.href;
	var confmKey = "devU01TX0FVVEgyMDIwMDYwMjA5NDkwMjEwOTgyMDE=";
	var resultType = "4"; // 도로명주소 검색결과 화면 출력내용, 1 : 도로명, 2 : 도로명+지번, 3 : 도로명+상세건물명, 4 : 도로명+지번+상세건물명
	var inputYn= "<%=inputYn%>";
	if(inputYn != "Y"){
		document.form.confmKey.value = confmKey;
		document.form.returnUrl.value = url;
		document.form.resultType.value = resultType;
		document.form.action="http://www.juso.go.kr/addrlink/addrLinkUrl.do"; //인터넷망
		//document.form.action="http://www.juso.go.kr/addrlink/addrMobileLinkUrl.do"; //모바일 웹인 경우, 인터넷망
		document.form.submit();
	}else{
		opener.jusoCallBack("<%=roadFullAddr%>");
		window.close();
	}
}
</script>
<body onload="init();">
	<form id="form" name="form" method="post">
		<input type="hidden" id="confmKey" name="confmKey" value=""/>
		<input type="hidden" id="returnUrl" name="returnUrl" value=""/>
		<input type="hidden" id="resultType" name="resultType" value=""/>
		<!-- 해당시스템의 인코딩타입이 EUC-KR일경우에만 추가 START-->
		<!-- 
		<input type="hidden" id="encodingType" name="encodingType" value="EUC-KR"/>
		 -->
		<!-- 해당시스템의 인코딩타입이 EUC-KR일경우에만 추가 END-->
	</form>
</body>
</html>

 

 

독타입과 메타 수정한다

 

5버전에서는 script만 적는다 나머지는 빼자

 

join.jsp에 수정한 샘플 자바스크립트를 넣는다

 

 

jusoPopup 로직은 아래에서

https://ondolroom.tistory.com/407

 

jusoPopup.jsp 이해

더보기 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Insert title here <% //request.setCharacterEncoding("UTF-8"); //한글깨지면 주석제거 //re..

ondolroom.tistory.com

 

에이작스 AJAX 테스트

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script
	src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
div {
	border: 1px solid black;
	margin: 5px;
	padding: 5px;
}
</style>
</head>
<body>

	<div id="reply-box">
		<div id="reply-1" class="re">첫번째 댓글 입니다.</div>
	</div>

	<input type="text" id="tf-reply" />
	<button onclick="start()">댓글쓰기</button>

	<script>
		var num = 1; // 이 값은 원래 db에서 가져와야됨
		function start() {
			num++;
			var a = $('#tf-reply').val();

			// 통신이 성공하면 아래 로직 실행

			$.ajax(
			// ajax 비동기 백그라운드로 다른페이지에 request를 하고 response를 받으면 result에 데이터를 저장한다. 
			// 보낼타입은 json 상대방에게 받을 타입도 json이다. 아래에서 확인

			{ // 오브젝트
				type : 'post',
				url : 'AjaxResponseTest.jsp',
				data : '{"username":"ssar", "password":"1234"}',
				contentType : 'application/json; charset=utf-8',
				dataType : 'json' // 받을데이터를 어떻게 파싱할까 text / json
			}

			).done(
					function(result) { // 통신이 성공
						console.log(result);
						$('#reply-box').prepend(
								"<div id='reply-" + num + "'>" + a + "</div>");
					}).fail(function(error) { // 통신이 실패
				console.log(error);
			});

		}
	</script>

</body>
</html>

 

<%@page import="com.google.gson.Gson"%>
<%@page import="com.cos.blog.dto.ResponseDto"%>
<%@page import="java.io.BufferedReader"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% 

	BufferedReader br = request.getReader();
	
	String input = null;
	StringBuilder sb = new StringBuilder();
	while((input = br.readLine()) != null ){
		sb.append(input);
	}
	
	System.out.println("받은데이터 시작---");
	System.out.println(sb.toString());
	System.out.println("받은데이터 끝---");
	
	ResponseDto<String> dto = new ResponseDto<>();
	dto.setStatus(200);
	dto.setData("성공");
	
	Gson gson = new Gson();
	String returnStr = gson.toJson(dto);
	System.out.println(returnStr);
	
	out.println(returnStr); // JSON을 리턴
	
%>

 

 

 

 

 

 

 

 

 

 

 

'Web > Jsp' 카테고리의 다른 글

JSTL 다운로드  (0) 2020.06.03
jusoPopup.jsp 이해  (0) 2020.06.02
블로그 만들기 3  (0) 2020.06.01
쿠키와 세션  (0) 2020.06.01
캐시 cache  (0) 2020.06.01

 

home.jsp 에서 로그인 확인 코드를 지운다

 

네비게이션에서 로그인시 principal이 있는 것을 확인하여 메뉴를 바꾸도록 함

 

로그아웃 액션을 생성함

 

UsersLoginProcAction에서 로그인 성공시 쿠키에 정보를 담도록함

 

추후 재로그인시 유저이름 칸에 아이디가 있을 것이다

 

 

 

 

'Web > Jsp' 카테고리의 다른 글

jusoPopup.jsp 이해  (0) 2020.06.02
200602 // blog 블로그 만들기 4  (0) 2020.06.02
쿠키와 세션  (0) 2020.06.01
캐시 cache  (0) 2020.06.01
레디스란 Redis  (0) 2020.06.01

I/O를 줄이는 법

클라이언트가 3명있다

서버는 하나다

서버는 db를 들고 있다

db -> 저장소는 하드디스크 + 램

서버의 가용량은 5개 (동시접속이 그 이상되면 뻗는다)

3명이 접속한뒤

다른 3명이 더 접속함 -> 뻗음

 

뻗지않기 위한 행동

1. 스케일업

장비를 좋은 걸로 바꾼다 / 알고리즘을 바꾼다 / 장비를 늘린다 (서버를 분산)

#L4
장비를 늘리게 되면 클라이언트가 어느 장비로 접속할지 정하는 (로드밸런싱 L4 비쌈)을 사용해야한다.
L4장비는 하드웨어적으로 분기해주기 때문에 비싸다 (전기적으로 분기)
접속 정보를 물리적으로 기록 (response가 없다면 서버에 머물고 있다는 뜻)

다만 재요청시 다른 서버로 가게되면 세션 인증이 없어서 로그인 등이 풀릴 수 있다.
그런 것을 방지하기 위해 스티키 세션 기능을 이용한다. (갔던 서버로 무조건 가도록 만들기)

 

2. 다른방법

# 라우터
L4장비가 비싸서 라우터를 쓰는 경우 스티키 세션을 못씀.
그럴경우 여러장비의 세션을 복제하여 모든 서버에 저장

# JDBC세션
DB에 인증정보를 저장(JDBC세션) - DB의 램에 상주시켜서 SELECT

# 레디스(Redis) 
세션만 담당하는 서버
레디스는 하드디스크가 없이 메모리만을 사용한다(빠른 응답)

큰회사는 L4도 쓰고 레디스도 쓴다

 

3. 세션을 쓰지 않는 방법 (비용이 들지 않는 방법)

#JSON WEB TOKEN

웹에 특화된 티켓이고 형태는 제이슨이다.

https://velopert.com/2389

 

[JWT] JSON Web Token 소개 및 구조 | VELOPERT.LOG

지난 포스트에서는 토큰 기반 인증 시스템의 기본적인 개념에 대하여 알아보았습니다. 이 포스트를 읽기 전에, 토큰 기반 인증 시스템에 대해서 잘 모르시는 분들은 지난 포스트를 꼭 읽어주세�

velopert.com

 

 


세션을 쓰지 않고 RSA를 사용 (서명)

웹: 화면에 대한 모든 데이터를 다운 - 통신시 HTML파일 전송,

앱: 화면에 대한 데이터를 내장 - 통신시 데이터를 전송, DB에서 JSON을 전송하고 앱에서 완성

Wifi나 아이피가 바뀌면 세션이 끊긴다

한종류의 서버로 웹과 앱과 응용프로그램을 동시에 운영할 수 있다 

,

여러개의 서버를 운영시

서버에 JSON WEB TOKEN을 던져 주고 sig의 3가지의 값을 한번더 해시한 값이 인증키이다

비밀키를 알기 때문에 비밀키로 풀면 3가지의 해시값이 동일 할 것이다

그렇다면 해당 정보가 정확하다는 것을 알 수 있다.

내용이 조금이라도 바뀌면 해시값이 달라짐

해당 내용은 DB에서 가져오지 않고 바로 사용해도 된다(서버에서 만든 자료라는 것을 인증 했기 때문)

------------------------

* RSA - 공개키 암호 시스템 (수많은 암호화 방식 DES AES 등등이 있었지만 최근에는 RSA를 사용한다)

 3*5*7*2 = 210은 쉽지만
210에서 3*5*7*2를 추출하는 것은 어렵다

키가 두개인 것을 비대칭키라고 한다.

암호화: 수신자의 공개키로 잠근다 - 보호해야할 데이터

서명: 전자 서명 (자신의 비밀키로 잠근다) - 자신을 인증해야할 데이터

------------------------

쿠키는 클라이언트가 정보를 저장하는 곳

세션은 서버가 정보를 저장하는 곳

세션에 정보를 저장하는 것이 안전하다

response.addCookie 로 클라이언트에게 쿠키를 보낸다

클라이언트가 서버에 처음 요청을 보내면 서버가 세션을 만들어서 response해 줄 때 세션아이디를 보내주고

그후 클라이언트가 서버로 요청 할 때 해당 세션아이디가 같이 전송 된다. 

쿠키는 도메인 별로 관리 (www.naver.com 등)

session.invalidate();를 사용하면 해당 요청을 보낸 유저의 세션아이디만 삭제한다

클라이언트가 쿠키에서 세션아이디를 지우면 세션없이 요청을 보내게 된다

서버는 요청이 일정시간 없다면 세션아이디를 없애버린다(자동 삭제)

-------------------------------

hyuntaeknote.tistory.com/m/3?fbclid=IwAR2dpUXi8IgiNd5nBYG_73g3EL4ANN7xq7Zbt465YKRqDCmDPCHy8IsjFTs

 

HTTP 는 Stateless 한데 로그인은 어떻게 구현할 수 있을까? (세션/쿠키를 이용한 인증)

개요 소셜 네트워크 서비스 'AGORA'를 제작하면서 가장 먼저 개발한 기능은 회원가입/로그인 입니다. 혼자 사용하거나 모든 정보가 공개된 웹 어플리케이션이 아니라면 대부분의 웹 어플리케이션

hyuntaeknote.tistory.com

 

'Web > Jsp' 카테고리의 다른 글

200602 // blog 블로그 만들기 4  (0) 2020.06.02
블로그 만들기 3  (0) 2020.06.01
캐시 cache  (0) 2020.06.01
레디스란 Redis  (0) 2020.06.01
200601 // out.println // request의 메소드  (0) 2020.06.01

캐시 - 이미지 등의 자료를 서버에서 가져와서 클라이언트 컴퓨터에 저장하고 추후 같은페이지를 이용할 때 해당 자료를 클라이언트 컴퓨터에서 가져온다

------------------------

'Web > Jsp' 카테고리의 다른 글

블로그 만들기 3  (0) 2020.06.01
쿠키와 세션  (0) 2020.06.01
레디스란 Redis  (0) 2020.06.01
200601 // out.println // request의 메소드  (0) 2020.06.01
JSP /슬래쉬 있는 것과 없는 것의 차이  (0) 2020.05.29

+ Recent posts