【发布时间】:2016-05-22 23:12:21
【问题描述】:
我刚刚在我的谷歌应用引擎 Java 应用上创建了自己的自定义身份验证。这并没有像我接下来要做的那样麻烦。
身份验证工作正常,但现在我正在尝试向默认用户对象添加一些额外的字段,这样我就不必对服务器进行如此多的调用。
所以到目前为止,我所做的是创建了一个实现 Authenticator 的自定义类。根据用户是否经过身份验证,authenticate 方法返回 User 对象或 null。然后我的 API 端点可以访问用户对象。
为了扩展我的应用程序功能,我尝试扩展默认用户对象,创建一些新字段,然后将其传递给端点。但是,由于端点可访问的用户对象与我扩展的对象不同,因此我无法获得额外的字段。
MyAuthenticator.java
import com.google.api.server.spi.auth.common.User;
public class MyAuthenticator implements Authenticator {
@Override
public User authenticate(HttpServletRequest request) {
// some code
return new AuthUser(...)
}
AuthUser.java
import com.google.api.server.spi.auth.common.User;
public class AuthUser extends User {
private String newToken;
public AuthUser(String email) {
super(email);
}
public AuthUser(String id, String email) {
super(id, email);
}
public AuthUser(String id, String email, String newToken) {
super(id, email);
this.newToken = newToken;
}
public String getNewToken() {
return newToken;
}
}
UserEndpoint.java
import com.google.appengine.api.users.User;
@Api(authenticators = MyAuthenticator.class)
public class UserEndpoint {
@ApiMethod(httpMethod = "GET")
public final Response sth(User user)
throws UnauthorizedException {
EndpointUtil.throwIfNotAuthenticated(user);
// ...
}
注意不同的类导入。
我不能在 UserEndpoint 某方法中使用 AuthUser,因为 API 期望我在调用服务器时发布该对象。
如何将额外的数据从验证器传递到我的端点方法?
【问题讨论】:
标签: java google-app-engine authentication google-cloud-endpoints