안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
암호화 처리
spring-security 의존 설정하기
pom.xml
#7. spring-security 관련 의존
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.2.22.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
<!-- 추가! -->
<org.springframework.security-version>5.3.3.RELEASE</org.springframework.security-version>
</properties>
<!-- #7. spring-security 관련 의존 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${org.springframework.security-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${org.springframework.security-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${org.springframework.security-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${org.springframework.security-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<version>${org.springframework.security-version}</version>
</dependency>
암호화 처리 빈 등록
bcrypt
- 랜덤 솔트 값 (bcrypt 내부에서) 을 추가해줌
security-context.xml 설정 파일 추가
web.xml
security 관련은 root-context (전역)에서 관리!
- 각 context 별로 설정 파일은 여러개 일 수 있음
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/security-context.xml
</param-value>
</context-param>
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.3.xsd">
<!-- #7.1 암호화 처리 빈 등록 -->
<bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean>
</beans>
namespace - security 추가!
servlet-context에서 root-context를 참조할 수 있으므로 MemberController에서 등록한 bcryptpasswordEncoder 빈을 사용할 수 있습니다.
MemberController
@Autowired
private BCryptPasswordEncoder bcryptPasswordEncoder;
@PostMapping("/memberEnroll.do")
public String memberEnroll(Member member, RedirectAttributes redirectAttr) {
try {
// 비밀번호 암호화
String rawPassword = member.getPassword();
String encodePassword = bcryptPasswordEncoder.encode(rawPassword);
member.setPassword(encodePassword);
log.debug("encodePassword = {}", encodePassword);
int result = memberService.insertMember(member);
redirectAttr.addFlashAttribute("msg", "회원가입이 정상적으로 처리 되었습니다.");
return "redirect:/";
} catch(Exception e) {
log.error("회원 가입 오류 : " + e.getMessage(), e);
throw e;
}
}
@콘솔출력값
DEBUG: com.ce.spring2.member.controller.MemberController - encodePassword = $2a$10$G7F3EfcXE8wJWUAsCznaoOqttim4MwJBNlWey5yuL5ZRMwRSdPvEi
성공적으로 암호화 처리가 된 것을 확인할 수 있으며, 랜덤솔트 값이 적용되기 때문에 동일한 비밀번호를 입력해도 상이한 결과가 나옵니다.
$2a$10$G7F3EfcXE8wJWUAsCznaoOqttim4MwJBNlWey5yuL5ZRMwRSdPvEi
- $2a$ : 알고리즘 타입
- 10$ : 옵션 (비용이 높을수록 속도가 오래걸리고, 메모리 사용량이 많음)
- G7F3EfcXE8wJWUAsCznaoO(22자리) : random salt
- qttim4MwJBNlWey5yuL5ZRMwRSdPvEi(31자리) : hashing + encoding 처리
'Java > Spring' 카테고리의 다른 글
Spring) Model (ModelAndView, ModelMap, Model), @ModelAttribute, @SessionAttribute, @SessionAttributes (1) | 2022.08.23 |
---|---|
Spring) 로그인 / 로그아웃 처리 (Model 세션 저장, 만료 처리) (0) | 2022.08.22 |
Spring) 회원 가입 처리하기 (index페이지에서 alert 작동 안되는 원인 파악) (0) | 2022.08.19 |
Spring) Dev 목록 가져오기 (0) | 2022.08.18 |
Spring) DB 등록 - 개발자 정보 등록 (StringTypeHandler) (0) | 2022.08.18 |