@PermitAllを勘違い(認証不要)して時間を無駄にした
WebアプリケーションまたはWebサービスを作る場合、認証をかけたいリソースと認証をかけたくないリソースを区別したい場合があると思います。当たり前ですが、ログインページとかは認証をかけたくないです。
JavaとJAX-RS(Jersey)でWebサービスを作成する場合、以下のようなクラスを作ります。
package com.tsukaby.jerseyauth;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("public")
public class PublicService {
@GET
@Path("info")
@Produces(MediaType.APPLICATION_JSON)
public Information getIt() {
return new Information("Title", "Public Information.");
}
}
このWebサービスに認証を導入する場合は、BASIC認証などを用いると思いますが、上記のinfoリソースには認証をかけないことを考えます。
このとき、@PermitAllアノテーションをgetIt()メソッドに付ければ解決すると思っていたのですが、どうやら違うようで・・・。web.xmlの設定次第ですが、認証は必要なようです。
PermitAllはあくまで認可という意味のようです。全てのユーザに上記リソースへの操作を認める、と。
permitって許可するという意味なので、てっきり認証すっ飛ばしてリソースへの操作を認めるのかと思いきや、違うんですね。ネーミングが悪いのか、自分の英語力が足りないのか・・・。