-- 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에 담아서 전달
'Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원 > 9월' 카테고리의 다른 글
22.09.19 - [ Spring ] lombok, controlllerAdvice, logger (0) | 2022.09.28 |
---|---|
22.09.16 - [ Spring ] DelegatingFilterproxy ,proxy, interceptor (0) | 2022.09.28 |
22.09.14 - [ Spring ] Spring 작동 원리 , mapper.xml 파일 연결하기 (0) | 2022.09.20 |
22.09.13 - [ Spring ] pom.xml / web.xml / context.xml 설정 파일 및 DB 설정 파일 (0) | 2022.09.19 |
22.09.12 - [ 추석 연휴 휴강 ] (0) | 2022.09.15 |