Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/9월

22.09.15 - [ Spring ] 암호화 처리, 리다이렉트 방법

giggs 2022. 9. 21. 16:31

 

-- INDEX --

 

 

1. 암호화 2. 암호화 사용준비 3. 암호화-회원가입 4.암호화-로그인 5. 리다이렉트 방법
평문을 암호문으로
양방향 암호화
BCrypt
Spring Security Core 
BCryptPasswordEncoder
encode() matches() Redirect
RedirectAttributes
addFlashAttribute

 

 

 

 


 

 

 

 

1. 암호화 개요

 

 

1-1. 암호화하는 이유

  • DB 접근 권한 있는 관리자가 악의적으로 이용하는 것 방지
  • 비밀번호 노출 방지

 

1-2. 암호화란?

  • 평문을 -> 암호문으로 만드는 작업

 

1-3. 복호화란?

  • 암호문을 -> 평문으로 만드는 작업

 

1-4. 양방향 암호화 / 단반향 암호화

  • 요즘은 복호화가 불가능한 단방향 암호화로 사용한다.
  • SHA-256 , SHA-512 이런 것들 사용했는데 – 특정 입력값에 특정 값 - 매칭 되는 결과가 나오는 문제로 이제 사용 못한다.
  • 우리가 사용할 것은 BCrypt 암호화 알고리즘 사용할 것이다.

 

1-5. BCrypt ( 양방향 )

  • 양방향 암호화 기법의 문제를 해결하기 위해 salt 기법이 추가되어있다.

 

 

 

 

 


 

 

 

 

2. 암호화 사용 준비

  • 디펜던시 : Spring Security Core 
  • bean 등록 : BCryptPasswordEncoder

 

 

 

 

스프링이랑 스프링시큐리티는 별개다

버전 맞출 필요 X

 

 

 


 

 

2-1 : 라이브러리 등록

  • spring-security-core

 

 

 

 


 

 

2-2 : bean 등록

  • 라이브러리에서 어떤 객체를 사용할 것이냐면
  • BCryptPasswordEncoder
  • id는 지정안해주어도 된다. - 객체만 만들어놓으면 – 스프링이 타입 기준으로 - 가져다줄 것이므로

 

 

 

 

 

암호화 사용 준비 끝!

 

 


 

 

 

 

3. 암호화 사용하여 회원가입해보기

  • 클라이언트가 입력한 비밀번호가 암호화되어서 db에 입력되었는지 확인
  • encode( );

 

 

 

3-1 : 컨트롤러 작업

  • HashMap 으로 id, pwd, nick 받기
  • 권장되는 방법은 아니다.
  • ( 어떤 data 받는지 체크 힘들고, 데이터만 받는 것이라 추가적으로 객체의 메서드 사용하는 작업은 안된다. )
  • 메서드 파라미터로 추가 - @RequestParam HashMap<String, String> map

 

 


 

 


 

 

3-2 : 서비스 작업 ( 인터페이스 와 클래스 )

 

 


 

 


 

# 여기서 암호화 작업 추가

  • 서비스 레이어에서  – 비즈니스 로직 검사나 제약 조건 검사 진행했었다.
  • 암호화 작업도 진행한다.

 

 

1. bean 등록해 놓은 BCryptPasswordEncoder 객체 @Autowired로 받아오기

2. 받아온 객체의 .encode() 메서드 활용하여 암호화 해주기

 

 

 


 

 

 

3-3 : dao 작업 ( 인터페이스, 클래스 )

 

 

# 메서드 명명 방법 

  • 지금 하는 행동에 대해서 알 수 있게 메서드명 짓기
  • 예를 들어 탈퇴 quit() 메서드명보다는 updateStatus() 로
  • 회원가입 join() 보다는 insert() 로
  • 반드시 그 작업을 위한 것 아니면 하는 행동에 맞는 메서드명으로 작성
  • 유지보수 측면이나 메서드 재활용 측면에서 유리함

 

 


 


 

 

3-4 : 매퍼 파일 작업

 

 


 

3-5 : 회원가입 테스트 후 db에서 비밀번호 암호화되어서 들어갔나 체크

 

 

 

 

 


 

 

 

4. 암호화 사용하여 로그인 해보기

  • id로 회원의 정보 불러온 다음
  • 클라이언트가 로그인 시 입력한 비밀번호와 불러온 비밀번호가 일치하는 확인
  • .matches( 평문, 암호문 );

 

 

 

4-1 : 컨트롤러 작업

 

 

 


 

 

4-2 : 서비스 작업

 

 

# 로그인할 때 입력한 비밀번호를 그대로 암호화한다면?

 

 

 

 

 

# 방법은? 

  • #일단 id 가지고 1명만 조회해온다.
  • #조회해 온 회원의 비밀번호 칼럼 값이랑 지금 받아온 비밀번호랑 매칭을 시켜본다.
  • #매칭 하는 방법은?
  • .matches() 메서드 활용

 

 


 

 

 


 

 

4-3 : dao 작업

 


 

 

4-4 : 매퍼 작업

 

 

 

암호화의 주요 키워드

Spring Security Core - 라이브러리

BCryptPasswordEncoder  객체 - bean

객체의 메서드 2- encode() , matches()

 

 

 

 

 


 

 

 

 

 

5. 스프링 리다이렉트 방법

  • Redirect 
  • RedirectAttributes 
  • RedirectAttributes - return { key값 }
  •  addFlashAttribute

 

 

 

5-1 : redirect

 

 

/kh로 요청을 보내면

redirect되어서 /test 그대로 요청을 보낸다.

 

 


 

5-2 : RedirectAttributes 

  • addAttribute() 메서드 활용
  • addAttribute( key : value ) 형식으로 보내면 - 
  • redirect 처리시 - /test 그대로 요청이 보내지는 것이 아니라
  • 쿼리스트링 형식으로  key = value 추가되어서 요청 보내진다.
  • /test?k1=v1 형식으로 요청이 보내진다.

 

 

 


 

 

5-3 : RedirectAttributes - return { key }

addAttribute() 메서드 활용

  • addAttribute( key : value ) 형식으로 담아놓고
  • return { key } 형식으로 보내면
  • redirect 처리 시 그대로 요청이 보내지는 것이 아니라
  • 해당 key값에 해당하는 value 값으로,
  • 해당 변수에 해당하는 value 값으로 변경되어서 요청이 보내진다.
  • /test/v1/v2

 

 

 

{k1}, {k2} 얘네가 변수로서 취급이 돼가지고

key값이 k1인거 k2인거 찾아가서

해당하는 value를 꺼내온다.

 

 

 

v1/v2 입력한 적이 없는데??

key값을 이용해서 value 넣어주기 가능

 

 


 

 

5-4 : addFlashAttribute

 

  • 리다이렉트 시 해당 경로에서 딱 한 번만 사용되도록 data를 전달 할 때 사용
  • 일회성 – 딱 한번만 사용되고 삭제되도록 처리된다.

 

 


 

# 요청 처리 흐름 #

 

 

클라이언트로 들어온 요청 - /kh를 처리하면서 - 세션에 msg 담아놓고 redirect

리디렉트 해서 /test로 이동 

test.jsp에서 세션에 있는 msg를 req객체에 담아놓고 세션에 있는 msg 지워버림

/test 처리과정에서 jsp 쪽으로 request에 담아서  전달