Spring Security

소셜로그인 4. 토큰 정보 정의

Yerim Kim 2021. 9. 5. 14:29

우리의 서버는

인증에 성공한 클라이언트(브라우저)에게 토큰을 만들어 줄 것입니다.

 

이 토큰을 만들기 위해 필요한 정보를 정의해봅시다.

 

1. application.yml 에 다음내용 추가

app:
  auth:
    tokenSecret: mymymymymymymymymymymymymymymymymymymymymy
    tokenExpirationMsec: 864000000
  • 토큰시크릿과 토큰유효시간은 마음대로하면 됩니다.
    단, tokenSecret의 길이가 충분히 길어야합니다. 그렇지 않으면 키 길이가 짧다, 안전하지 않다 이러면서 예외가 빵빵 터질 것입니다.

 

2. AppProperties

앞에서 정의한 토큰 정보를

자바 코드에서 가져다 쓰기 위해

AppProperties를 작성합니다.

package com.yelim.security.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "app")
public class AppProperties {

    private final Auth auth = new Auth();

    public static class Auth {

        private String tokenSecret;
        private long tokenExpirationMsec;

        public String getTokenSecret() {
            return tokenSecret;
        }

        public void setTokenSecret(String tokenSecret) {
            this.tokenSecret = tokenSecret;
        }

        public long getTokenExpirationMsec() {
            return tokenExpirationMsec;
        }

        public void setTokenExpirationMsec(long tokenExpirationMsec) {
            this.tokenExpirationMsec = tokenExpirationMsec;
        }
    }

    public Auth getAuth() {
        return auth;
    }
}

 

3. Enable Configuration Properties

main 메서드가 있는 클래스에

@EnableConfigurationProperties(AppProperties.class) 를 붙여줍니다.

@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)    // 이거 추가
public class SecurityApplication {

    public static void main(String[] args) {
        SpringApplication.run(SecurityApplication.class, args);
    }
}

 

4. AppPropertiesTest

앞에서 구현한 코드가 잘 동작하는지 테스트해보겠습니다.

package com.yelim.security.config;

import static org.assertj.core.api.Assertions.assertThat;

import com.yelim.security.config.AppProperties.Auth;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@EnableConfigurationProperties(value = AppProperties.class)
@TestPropertySource("classpath:application.yml")
class AppPropertiesTest {

    @Autowired
    private AppProperties appProperties;

    @Test
    void getAuth() {
        Auth auth = appProperties.getAuth();

        assertThat(auth.getTokenSecret()).isEqualTo("mymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymymym");
        assertThat(auth.getTokenExpirationMsec()).isEqualTo(864000000);
    }
}

 

테스트가 통과했습니다. yml 에서 토큰 관련 정보를 잘 가져오고 있습니다.