study/WebServer

7_ws_(암호화)

스파이크12 2020. 1. 17. 08:35

@@@암호화 
fillter>EncryptFilter 

1. HttpServletRequest를 사용하기 위해
request를 받아와 다운 캐스팅

2. 암호화하기 위해 wrapper객체 생성

3. wrapper > EncryptWrapper 작성
HttpServletRequestWrapper를 상속
상속받은 HttpServletRequestWrapper 클래스는 기본 생성자가 없음
반드시 명시적으로 HttpServletRequest를 매개변수로 하는 생성자 작성이 필수

public EncryptWrapper(HttpServletRequest request){
	super(request);
}

4. ServletRequestWrapper의 getParameter() 오버라이딩
(비번을 가로채서 오버라이딩 하기 위해)
@Override
public String getParameter(String key){
// id, pwd, name, ... 순차적으로 한번씩 들어옴

4-1. 요청 데이터의 key에 대응되는 value를 저장할 변수 선언
	String value ="";

4-2
if(key != null && (key.equals("memberPwd") || (key.equals("pwd1") || key.equals("newPwd1")
	|| key.equals("currentPwd"))){
// 회원가입시, 회원정보수정, 비밀번호변경 등 비밀번호입력받는 모든 부분의 name
// 암호화진행 -> SHA-512 암호화
// 해시함수란?
// 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수
	value = getSha512(super.getParameter(key));
// 기존에 쓰던 getParameter로 불러오고
// sha-512()메소드로 암호화해서 value값에 넣음
} else {
// 나머지는 그대로 보냄
	value = super.getParameter(key);
}
return value;

5. SHA-512() 메소드 작성
public static String getSha512(String pwd){
	String encPwd = null;
    MessageDigest md = null;
    // 지정된 알고리즘에 따라
    // 해시함수를 진행하는 클래스
 	try{
    // MessageDigest.getInstance("알고리즘명")
    // 지정된 알고리즘을 사용해 MessageDigest 객체를 작성하여 반환
    	md = MessageDigest.getInstance("SHA-512");
    } catch (NoSuchAlgorithmException e) {
    	e.printStackTrace();
    }
    // 암호화 진행을 위해서는 전달받은 문자열(비밀번호)를 
    // 바이트 배열로 변환해야함
    // (한글은 2byte기 때문에 비번에서 사용불가)
    byte[] bytes = pwd.getBytes(Charset.forName("UTF-8"));
    // pwd의 UTF-8 이름의 Charset을 찾아서 바이트로 변환하여 
    // 바이트 배열의 바이츠에 넣는다
    
    // md객체에 pwd 바이트배열을 전달하여 갱신
    // -> 실제 암호화(해시함수적용)진행
    md.update(bytes);
    
    // java.util.Base64 인코더를 이용해서
    // 암호화된 바이츠 배열을 인코딩해서 문자열로 출력
    // 010101000111로 되어있던 문자를
    // asdfdasf213dsfsda식으로 바꿈
    encPwd = Base64.getEncoder().encodeToString(md.digest());
    
    return encPwd;
    




@@@ ajax

- 동기식 데이터 통신

클라이언트가 서버로 데이터를 요청하면 응답이 올때까지 다른 작업은 대기

- 비동기식 데이터 통신

클라이언트가 서버로 데이터 요청 후 응답을 기다리지않고 작업 수행 가능

추후 요청에 대한 응답이 오면 응답에 관련된 작업을 진행

@ 특징

1. 전체페이지를 갱신하지않고 일부분만 업데이트 가능

2. 사용자에게 즉각적인 반응과 풍부한 UI 경험을 제공

3. activeX나 플러그인 프로그램 설치 없이 이용 가능

4. JavaScript 방식, jQuery 방식으로 사용가능

@ 단점

1. Ajax는 JavaScript이므로 브라우저에 따른 크로스브라우저 처리가 필요함

2. 오픈소스로 차별화가 어려움

3. 연속적인 데이터 요청 시 서버 부하 증가하여 페이지가 느려짐

4. 페이지 내 복잡도가 증가하여 에러 발생 시 디버깅이 어려움