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. 페이지 내 복잡도가 증가하여 에러 발생 시 디버깅이 어려움