language/Spring
[Spring/Spring Security] spring framework에 BCryptPasswordEncoder 적용시키기
zincah
2022. 4. 24. 02:50
반응형
1. BCryptPasswordEncoder
스프링 시큐리티(Spring Security) 프레임워크에서 제공하는 클래스 중 하나로 비밀번호를 암호화하는 데 사용할 수 있는 메서드를 가진 클래스

스프링 시큐리티 5.4.2 이상 부터 위의 세가지 메소드를 다 사용할 수 있습니다.
encode() : 암호화되지 않은 것들을 암호화 시키는 메소드 입니다.
matches() : storage에서 가져온 인코딩된 암호가 인코딩된 후 제출한 원시암호와 일치하는 지 확인하는 메소드 입니다. boolean 형으로 반환하는데 일치하면 true로 반환하고 일치하지 않으면 false를 반환합니다. 그렇다고 암호 자체가 디코딩되는 것이 아닙니다.
upgradeEncoding() : 보안을 위해 인코딩 된 암호를 다시 인코딩 해야하는 경우 true를 반환하고 아니면 false를 반환합니다. default 형은 false 입니다.
2. PasswordEncoder Test
pom.xml, web.xml, security-context.xml, BCryptoPasswordEncoder Bean
1) pom.xml
<!-- security -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.6.0</version>
</dependency>
2) web.xml
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/presentation-layer.xml</param-value>
<param-value>/WEB-INF/config/security-config.xml</param-value>
</init-param>
</servlet>
security 설정을 해줄 security-config.xml 파일을 web.xml에 등록해줍니다.
3) security-config.xml


WEB-INF폴더 안에 config라는 폴더를 생성해서 security-config이라는 이름으로 Spring Bean Configuration File을 생성합니다. file name을 입력하는 란이 나올 거고 거기에 이름을 설정해두고 next를 눌러줍니다.

사진에 체크되어 있는 3가지를 체크하고 Finish를 눌러줍니다. 그리고 BCryptPasswordEncoder를 빈으로 등록해줍니다.
<bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean>

이런식으로 사용을 해주면 됩니다. 저는 패스워드 인코딩을 테스트 해보기 위해서 test class를 생성해보겠습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/config/security-config.xml"})
public class PasswordEncoder {
@Autowired
BCryptPasswordEncoder passwordEncoder;
@Test
public void checkEncoding() {
String rawPass = "dkssud";
String encodePassword1;
String encodePassword2;
encodePassword1 = passwordEncoder.encode(rawPass);
encodePassword2 = passwordEncoder.encode(rawPass);
System.out.println(encodePassword1);
System.out.println(encodePassword2);
String truePass = "dkssud";
String wrongPass = "wkfrk";
System.out.println("true password verify : " + passwordEncoder.matches(truePass, encodePassword2));
System.out.println("wrong password verify : " + passwordEncoder.matches(wrongPass, encodePassword2));
}
}
src/test/java 소스 폴더 내부에 패키지 안에 test class를 위처럼 작성해줍니다. 그 다음에 실행시켜 주고 아래와 같이 console 화면이 나오면 패스워드가 잘 인코딩 되는 것을 확인할 수 있습니다.

반응형