[Play!] 1.2系でBASIC認証

 Play!framework1 Java
2013.08.12

Play! framework 1.2系でBASIC認証を実装する方法について。

 

 

401 - Unauthorized401 - Unauthorized / GirlieMac

 

今のところ2系の記事が目立つので、1系の場合をメモ。


BASIC認証のためのコントローラを作成

package controllers;

import play.Play;
import play.mvc.Before;
import play.mvc.Controller;

/**
 * Basic-Authentication
 */
public class BasicAuth extends Controller {
	private static final String WWW_AUTHENTICATE = "WWW-Authenticate";
	private static final String REALM = "Basic realm=\""+prop("auth.basic.realm", "your realm")+"\"";

	private static final String AUTH_USER = prop("auth.basic.user", "admin");
	private static final String AUTH_PASS = prop("auth.basic.pass", "admin");

	@Before
	static void authenticate() {
		if (!(AUTH_USER.equals(request.user) && AUTH_PASS.equals(request.password))) {
			response.setHeader(WWW_AUTHENTICATE, REALM);
			error(401, "Unauthorized");
		}
	}

	static String prop(String key, String def) {
		String candidate = Play.configuration.getProperty(key);
		return (candidate == null) ? def : candidate;
	}
}

 

それをBASIC認証をかけたいページのコントローラに、Withアノテーションで追加。

package controllers;

import play.mvc.Controller;
import play.mvc.With;

/**
 * Application
 */
@With(BasicAuth.class)
public class Application extends Controller {

	public static void index() {
		render();
	}
}

 

最後に、BasicAuth#authenticateで使っている
error(401, "Unauthorized")が参照するViewを
app/view/errors/401.htmlとして用意しましょう。

(Playフォルダ/framework/templates/errors/404.htmlあたりを参考に)

 

もちろん、Play!の認証モジュール、Secureと併用することも可能です。

@With({Secure.class, BasicAuth.class})