Spring

Spring - security 암호화 하기

블린더르 2019. 2. 26. 23:50

스프링에서는 spring-security의 BCryptPasswordEncoder 를 이용하여 암호화를 할 수 있다.

설정하기

  1. 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에 대한 라이브러리를 등록한다.

  1. 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>
  1. 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 가 나오는 것을 확인할 수 있다.

반응형