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 에서 토큰 관련 정보를 잘 가져오고 있습니다.