外部のAPIサービスを利用した開発を行うときに、アクセスキーとアクセストークンを求められる場合があります。
規模が小さいうちは、
String accessKey="hoge"; //アクセスキー String accessSecret="fuga"; //アクセストークン
とソースコードにベタ打ちするのも一つの手段ではありますが、アプリケーションの規模が大きくなってくるとやはり外部の値はプロパティファイルにもたせて管理したくなります。
そこで、今回はSpring Bootの環境下で、プロパティファイルを読み込むような実装の手順についてまとめてみます。
1.src/main/resourcesにプロパティファイルを配置
src/main/resources下に読み込みたいプロパティファイルを配置します。
awesome.properties
awesome.accessKey=thisisaccesskey9876 awesome.accessSecret=thisisaccesssecrettoken1234
2.Springの@PropertySourceアノテーションで読み込み
Spring Bootでプロパティファイルの値を読み込むには、@PropertySourceと@Valueを使用します。
また、APIのaccessKeyとaccessTokenをひとまとめにしたValueObjectを作成し、Bean Configurationで呼び出せるように設定してみます。
@Configuration @PropertySource(value = "classpath:awesome.properties") public class AwsSESConfig { @Value("${awesome.accessKey}") private String accessKey; @Value("${awesome.accessSecret}") private String accessSecret; @Bean public AwesomeAPIConfig awesomeAPIConfig { return new AwesomeAPIToken(accessKey,accessSecret); } }
ValueObject
public class AwesomeAPIConfig { private String accessKey; private String accessSecret; public AwesomeAPIConfig(String key,String secret){ this.accessKey = key; this.accessSecret = secret; } public String getAccessKey(){ return accessKey; } public String getAccessSecret(){ return accessSecret; } }
これで、APIのアクセストークンとシークレットキーの組をSpringのServiceから@Autowiredで呼べるようになります。
@Service public class SomeService { @Autowired private AwesomeAPIConfig config; public void doSomething(){ //config.getAccessKey() などを使用して外部のAPIを叩く処理を記述します } }
githubに外部APIのアクセスキーなどを公開したくないときは
github上で自分のリポジトリを管理している場合、publicリポジトリに外部APIのアクセスキー・アクセストークンを記述したソースを残すことはセキュリティ上好ましくありません。
ソースにベタ打ちする弊害が、ここでも出てくるわけですね。
企業のシステム開発であればだいたいPrivateリポジトリで管理するのでさしたる問題はありませんが、個人のポートフォリオとしてソースコードを公開する場合などに困ったことになります。
というわけで、githubに外部APIのアクセスキーを公開したくない場合に取るべき方法について説明します。
default.propertiesなどを作って構造だけ書く
必要な構造のみをawesome.default.propertiesなど、名前を変えて記述します。
構造は同じですが、もちろん値はダミーにしておくことに注意しましょう。
awesome.accessKey=********* awesome.accessSecret=********
コミットする場合はこのdefault.propertiesのみをコミットします。
本体を.gitignoreで無視する
ローカルにある、実体のpropertiesファイルを.gitignoreに追加してコミットされないようにします。
本来の値は、secret gistとかで管理しましょう。
例えば他の端末で開発する場合には、ソースコードをクローンし、その後awesome.default.propertiesをawesome.propertiesという名前でコピーし、secret gistなどから本来のアクセスキーをコピペします。
このようにすることで、アクセスキーなどに変更による余計なgitの差分を発生させずに、複数端末で開発を行うことができます。