Spring
Spring - security 암호화 하기
블린더르
2019. 2. 26. 23:50
스프링에서는 spring-security의 BCryptPasswordEncoder 를 이용하여 암호화를 할 수 있다.
설정하기
- pom.xml
<!-- 스프링 시큐리티등록 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${org.springframework-version}</version>
</dependency>
pom.xml 에 spring-security에 대한 라이브러리를 등록한다.
- security-context.xml 생성
appServlet 폴더 밑에 security-context.xml 파일을 생성한다. (new -> Spring Bean Configuration file)
생성할 때 namespace는 beans 와 security 를 선택한다.
아래와 같이 BCryptPasswordEncoder bean을 등록한다.
<?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.0.xsd">
<bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
</beans>
- web.xml 에 security-context.xml 등록
web.xml 에 security-context.xml 을 추가한다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/appServlet/security-context.xml
</param-value>
</context-param>
사용하기
@Autowired
BCryptPasswordEncoder cryptEncoder;
@RequestMapping("/crypt")
public void cryptTest() {
String pw = "1234";
String pwCrypt = cryptEncoder.encode(pw);
System.out.println("비밀번호 : " + pw);
System.out.println("암호화 후 : " + pwCrypt);
}
결과
여러번 실행한 결과이다. 암호화를 하면 매번 값이 달라지기 때문에
비밀번호와 암호화 된 값을 비교하는 방법은 BCryptPasswordEncoder의 matches(비밀번호, 암호화된 값)
를 이용한다.
System.out.println(cryptEncoder.matches(pw, pwCrypt));
위의 코드에 넣어서 확인해보면
결과 값으로 true 가 나오는 것을 확인할 수 있다.
반응형