次のGoogle Cloud Endpoints APIを使用しています。特定の役割を持つ認証済みのユーザーにのみアクセスできるようにしたいと考えています。コードのGoogle App EngineですべてのAPIエンドポイントを認証
数行は千個の言葉よりもはるかに言う:
import com.google.appengine.api.users.User;
@Api(
name = "heroesApi",
version = "v1",
clientIds = {...},
scopes = {...},
audiences = {...},
namespace = @ApiNamespace(
ownerDomain = "my.domain.com",
ownerName = "my.domain.com",
packagePath=""
)
)
public class HeroesApi {
// THIS IS THE FUNCTION THAT I DON´T KNOW WHERE TO PUT
/**
* Validates that the user is logged in with a specific role
* @param user
* @throws UnauthorizedException
* @throws ForbiddenException
*/
private void validateUser(User user) throws UnauthorizedException, ForbiddenException {
IUserController userController = ControllerFactory.get.userController();
if (user == null) {
throw new ForbiddenException("You must be logged in, my friend.");
} else if (!userController.isLoggedAsSuperHero(user)) {
throw new UnauthorizedException("You must be logged in as a Superhero.");
}
}
// API METHODS
@ApiMethod(path = "something", httpMethod = ApiMethod.HttpMethod.PUT)
public DoneTask doSomething(Some thing, User superhero) throws UnauthorizedException, ForbiddenException {
// this is what I want to avoid on each function
this.validateUser(superhero);
// Now I'll do something special
IUserController userController = ControllerFactory.get.userController();
return userController.doSome(thing);
}
// MORE GORGEOUS METHODS JUST FOR SUPERHEROES, SO I HAVE TO PERFORM THE VALIDATION...
}
私が持っているといえ、すべての要求に/ API/heroesApi/*が、問題のweb.xmlファイルを使用してフィルタを追加する方法についてGoogle Appengine APIユーザーをキャッチする方法があります。
これはGoogleが提供するものではありませんか?アプリケーションが役割の概念を構築する必要があり、そしてあなたは、フィルタを作成し、現在のユーザーを取得する必要がありますので、
validateUser(User)
に繰り返し呼び出しを回避するために、任意の提案は大歓迎
明確にするために、J2EE認証でGoogle Cloudを介して誰が認証されるのかを判断したいと思いますか? –
@ tim-biegeleisenメソッドレベルではなく、クラスレベルでユーザーを検証したいと思います。私が言及したようにすることは、回避策のようになりますが、それが機能すれば十分です。 –