目的
WebAppsを使用して簡単なJavaのWebアプリケーションを作成する
コードには直接パスワードを入力せずWebAppsの接続文字列にDB(SQLDatabase)への接続情報を含むことでセキュリティを向上させる
手順1 WebAppsの作成
AppServiceからWebAppsを選択して作成する
手順2 Java環境構築
作成したWebAppsの『アプリケーション設定』を選択し、『全般設定』で
Javaバージョン、Javaマイナーバージョン、Java Webコンテナーに任意の設定を選択
※今回はJava8, 1.8.0_181(oracle), Tomcat 8.5(最新)を選択
手順3 DBへの接続情報を入力
作成したWebAppsの『アプリケーション設定』を選択し、『接続文字列』で
接続文字列名、値、種類を入力する
※今回は以下のように入力する
1.serverId, SQLServerの名前, SQLServer
2.dbId, SQLDatabaseの名前, SQLAzure
3.useId, SQLServerで作成したユーザID, SQLServer
4.pass, SQLServerで作成したパスワード, SQLServer
手順4 アプリの実装
アプリ内で環境変数の取得(System.getenv)で先ほどの接続情報を取得する
種類にSQLServerを選択した場合はSystem.getenv("SQLCONNSTR_接続文字列名")、
SQLAzureを選択した場合はSystem.getenv("SQLAZURECONNSTR_接続文字列名")で値を取得する
また、WebContent/WEB-INF/libの下にSQLServerのJDBCドライバを格納すること
(https://docs.microsoft.com/ja-jp/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017)
以下は簡単なサンプルコード
package servlet;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.DriverManager;
public class SQLExecution {
//WebAppsの環境変数から値を取得
String hostName = System.getenv("SQLCONNSTR_serverId"); // update me
String dbName = System.getenv("SQLAZURECONNSTR_dbId"); // update me
String user = System.getenv("SQLCONNSTR_useId"); // update me
String password = System.getenv("SQLCONNSTR_pass"); // update me
String url = String.format("jdbc:sqlserver://%s:1433;database=%s;user=%s;password=%s;encrypt=true;"
+ "hostNameInCertificate=*.database.windows.net;loginTimeout=30;", hostName, dbName, user, password);
Connection connection = null;
String sql = null;
void select() {
}
public void insert() {
try {
//JDBCドライバを指定
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection = DriverManager.getConnection(url);
// Create and execute a SELECT SQL statement.
sql = "insert into testTBL("
+ "key"
+ ")"
+ "Values"
+ "("
+ 1
+ ")";
try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql)) {
connection.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
手順5 アプリのデプロイ
アプリをWebAppsにデプロイする
方法はいくつかあるが、今回はAzure Toolkit for Eclipse(https://docs.microsoft.com/ja-jp/java/azure/eclipse/azure-toolkit-for-eclipse-installation?view=azure-java-stable)を使用
アプリを右クリックし『Azure』<『Publish AS Azure Web Apps』を選択し、デプロイしたいWebAppsを選択する
感想
最近はクラウドをよく使うので、接続情報をコードから排除できるのはよかった。
こうしておけば、テスト環境・本番環境でも全く同じコードが使えますし、GitHubなどでコードを公開した時の危険性も減るので重要と思う。