개발군싹

[Spring]Spring Security 암호화 본문

Spring

[Spring]Spring Security 암호화

개발자군싹 2023. 12. 12. 00:19

Spring에서의 암호화 (SpringSecurity)

mvnrepository → Spring Security Core, Web, Config 설치

security-context.xml 생성 → web.xml → context-param에 등록

⇒ Web Load 시 security-context.xml 파일이 로드된다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:security="http://www.springframework.org/schema/security"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.8.xsd
	        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- 패스워드 암호화를 제공하는 클래스를 빈으로 등록하기 -->
	<bean id="bcryptPassword" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
</beans>

 

➡️ 암호화

- BCryptPasswordEncoder클래스가 제공하는 메소드를 이용해서 단방향 암호화하기 - encode()메소드를 이용

 

MemberController.java

private final BCryptPasswordEncoder passwordEncoder; //bean으로 등록 객체

 @RequestMapping("/enrollMemberEnd.do")
    public String enrollMemberEnd(Member m, Model model) {
	
	//BCryptPasswordEncoder클래스가 제공하는 메소드를 이용해서 단방향 암호화하기
	//encode()메소드를 이용
	String oriPw = m.getPassword();
	String encPw = passwordEncoder.encode(oriPw);
	System.out.println(oriPw);
	System.out.println(encPw);	
	
	m.setPassword(encPw);
	int result = service.insertMember(m);
	if(result>0) {
	    model.addAttribute("msg","회원가입완료");
	    model.addAttribute("loc","/");
	}else {
	    model.addAttribute("msg","회원가입실패");
	    model.addAttribute("loc","/");
	}
	
	return "common/msg";
    }

 

회원가입 시 입력한 password 정보가 BCryptPasswordEncoder 객체를 통해 암호화

 

➡️ 암호화된 비밀번호를 이용하여 로그인 기능 구현 시 패스워드 일치여부 확인

- 비밀번호 일치여부를 확인하기 위해서는 BCcryptPasswordEncoder클래스가 제공하는 matchs() 메소드 이용

- matchs("원본패스워드", "암호화패스워드") => true / false 반환

Member m = service.selectMemberById(userId);

if(m!=null && passwordEncoder.matches(password,m.getPassword())) {
    //로그인 성공
    model.addAttribute("loginMember", m);
}