Javaのプログラム内でBasic認証を設定する
目次
1.サーバ側(Apacheとか)でかける
2.ウェブアプリケーションサーバ(Tomcatとか)でかける
3.プログラム側で制御する
サーバ側(ApacheとかNginxとか)でかける。
ウェブのリクエストを最初にうけとるサーバでの設定です。
ユーザアクセスがウェブアプリケーション側に渡る前に制限するので、負荷・セキュリティ的にはこれが一番ベストです。
AuthUserfile /etc/httpd/.htpasswd AuthGroupfile /dev/null AuthName "Secure Zone" AuthType Basic require valid-user
ウェブアプリケーションサーバ(Tomcatとか)でかけることもできる
web.xml
<web-app> <security-constraint> <web-resource-collection> <web-resource-name>html</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>tomcat</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>UserDatabaseRealm</realm-name> </login-config> <security-role> <role-name>tomcat</role-name> </security-role> </web-app>
Javaプログラムで制御
データベースからID/パスワード情報を読み込んで、認証を設定する。一番柔軟。
一画面だけかけたいとか、ユーザー名/パスワードをDBから取得して細かく制御をおこないたいとか。そんなときに使えます。
※java.util.Base64を利用
String user = ""; String pass = ""; // 省略 HttpURLConnection con = (HttpURLConnection) url.openConnection(); final String userPassword = user + ":" + pass; String encodeAuthorization = Base64.getEncoder().encodeToString(userPassword.getBytes()); con.setRequestProperty("Authorization", "Basic " + encodeAuthorization); con.connect();
以上、メモでした。