@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って許可するという意味なので、てっきり認証すっ飛ばしてリソースへの操作を認めるのかと思いきや、違うんですね。ネーミングが悪いのか、自分の英語力が足りないのか・・・。