원래 서블릿프로젝트에서 사용한 SHA512방식의 암화화 방식은 한계가 정확하게 있었다
예를 들어 A유저와 B유저가 둘 모두 qwer1234라는 암호화를 사용하게 되면 DB에 둘이 똑같이 생긴 암호화된 문자열을 가지게 된다는 문제가 있다
이 정도 시간이 지났으면 해킹 위험성이 상당히 높다고 생각한다
Bcrypt같은 경우 매번 소금 치듯이 다른 암호화를 진행해 해독하기 거의 불가능하게 생겼다
사용법은 비교적 간단했다
버전은 솔직히 잘 모르겟다 하지만 나는 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도 나두게 되면 부모 예외에서 한번에 처리하게 된다
나중에 할때는 문서 한번 찾아서 세부 분류로 나둬도 좋을것 같다.