Bcrypt ( 암호화 ) , 예외처리

DeadWhale·2022년 6월 24일
0

Spring

목록 보기
10/25
post-thumbnail

Bcrypt

원래 서블릿프로젝트에서 사용한 SHA512방식의 암화화 방식은 한계가 정확하게 있었다

예를 들어 A유저와 B유저가 둘 모두 qwer1234라는 암호화를 사용하게 되면 DB에 둘이 똑같이 생긴 암호화된 문자열을 가지게 된다는 문제가 있다

이 정도 시간이 지났으면 해킹 위험성이 상당히 높다고 생각한다

Bcrypt같은 경우 매번 소금 치듯이 다른 암호화를 진행해 해독하기 거의 불가능하게 생겼다

사용법은 비교적 간단했다

라이브러리 추가

  1. Spring Security Core ( 5.1.7 )
  2. Spring Security Web ( 5.1.7 )
  3. Spring Security Config(5.1.7)

버전은 솔직히 잘 모르겟다 하지만 나는 2022/06/24기준 5.1.7 버전들을 사용했다
3개 모두 메이븐레파지토리 사이트에서 다운받아 pom.xml에 추가했다

그 후 Spring 폴더에 Spring bean configuration file 생성
파일 이름 : spring-security.xml

스프링 시큐리티xml설정

<bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

사용법

매우 간단했다
@Autowired로 연결한다
이 때 bean등록은 위에서
spinrg-security.xml에서 id로 등록해놔서 호출할 수 있다
보통 클래스 최상단에서 선언 후

@Autowired
private BCryptPasswordEncoder bcrypt;
-----------------
암호화 하고 싶을 때 
:bcrypt.encode("암호화할 값");
-----------------
암호화된 값이랑 비교하고 싶을 때 
:bcrypt.matches("비교할 원시 값", "암호화된 값");


예외처리

예외처리 방법에 3가지 경우가 있다.


1. try - catch 방식
2. 컨트롤러 단위로 예외처리 bean 등록
3. 프로젝트 단위로 예외처리 컨트롤러 생성


그냥 컨트롤러 하나 만들어서 한번에 처리하는게 훨씬 편한것 같다

@ControllerAdvice
public class ExceptionController {

	//컨트롤러에서 발생하는 예외를 모아 처리
	@ExceptionHandler(SQLException.class)
	public String sqlExceptionHandler(Exception e,Model model){
		e.printStackTrace();
		model.addAttribute("errorMessage","SQL 서비스 이용중 문제가 발생하였습니다");
		model.addAttribute("e",e);
		return "common/error";
	}

	@ExceptionHandler(Exception.class)
	public String AllexceptionHandler(Exception e,Model model){
		e.printStackTrace();
		model.addAttribute("errorMessage","서비스 이용중 알수없는 문제가 발생하였습니다");
		model.addAttribute("e",e);
		return "common/error";
	}
}

저러면 서버에서 예외 처리 페이지로 이동하게 된다
이거 재활용 해서 쓰면 될것 같다.

다음에 쓸 때 Exception.class로 한번에 잡지 말고
SQLException 처럼 각각 다른 예외 문구를 출력하면
팀원들이 더 잘 알아볼거같다

이 때 그냥 Exception도 나두게 되면 부모 예외에서 한번에 처리하게 된다
나중에 할때는 문서 한번 찾아서 세부 분류로 나둬도 좋을것 같다.

0개의 댓글