当前位置: 首页 > 面试题库 >

如何在GAE端点中检索自定义User对象?

锺威
2023-03-14
问题内容

我刚刚在Google App Engine Java应用程序上创建了自己的自定义身份验证。麻烦不如我想做的下一件事。

身份验证工作正常,但是现在我尝试向默认的User对象添加一些其他字段,这样我就不必对服务器进行太多调用。

因此,到目前为止,我已经创建了一个实现Authenticator的自定义类。根据用户是否通过身份验证,authenticate方法返回User对象或null。然后,我的API端点可以访问用户对象。

为了扩展我的应用程序功能,我尝试扩展默认的User对象,创建一些新字段,然后将其传递给端点。但是,由于端点可访问的User对象与我扩展的对象不同,因此无法获得额外的字段。

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 sth方法中使用AuthUser,因为API希望我在调用服务器时发布该对象。

如何将额外的数据从身份验证器传递到端点方法?


问题答案:

AppEngine文档说注入的类型如下:

  • com.google.appengine.api.users.User
  • javax.servlet.http.HttpServletRequest
  • javax.servlet.ServletContext

但是,它没有提及com.google.api.server.spi.auth.common.User,但可以肯定地起作用。我刚刚尝试使用AppEngine
Java SDK 1.9.32。我不知道这是错误还是功能。

因此,在UserEndpoint.java中,您必须导入com.google.api.server.spi.auth.common.User,然后才能将其转换为AuthUser。

import com.google.api.server.spi.auth.common.User;

@Api(authenticators = MyAuthenticator.class)
public class UserEndpoint {
@ApiMethod(httpMethod = "GET")
public final Response sth(User user)
        throws UnauthorizedException {
    EndpointUtil.throwIfNotAuthenticated(user);

    ((AuthUser)user).getNewToken();

    // ...
}


 类似资料:
  • 我正在尝试将我的实时数据库调整为一个聊天应用程序的云firestore。存储的对象是我创建的Message类。我希望邮件成为文档。 我的RecyclerView适配器将使用实时数据库这样检索它们: 下面是我如何开始用Firestore重新创建它的。如何在快照侦听器的OneEvent方法中将快照转换回消息?

  • Django 自带的 User 及 auth 库为快速开发带来了很大便利,也增加了扩展其功能的难度。 Django 官方文档中是推荐使用一对一的关联 Model 来扩展 User model: class UserExtend(Model): user = OneToOneField(User, auto_create=True, relate_name='extend') fie

  • 问题内容: 我正在尝试将自己的自定义对象传递到包中: 我得到错误: 问题答案: 一种方法是让您的自定义对象实现Parcelable接口并使用

  • 我有以下对象需要存储在Cassandra中。我需要使用UDT还是有其他方法来存储对象。我需要最终使用存储库方法从spry-boot应用程序存储它。

  • 问题内容: 我在Playground中使用Swift 3,Xcode 8.0拥有此功能: 创建人员数组 编码数组 保存到用户默认值 检查 从userDefaults返回 只需检查存档的数据 我无法正确将数据对象保存到userDefaults,此外,底部的检查还会产生错误“严重错误:在展开可选值时意外发现nil”。“检查”行还显示已保存的对象为nil。这是我对象的NSCoder中的错误吗? 问题答案

  • 问题内容: 我试图将其他数据保存在de用户主体对象中。 我所做的是: 在我现有的用户类中实现“ UserDetails”界面,我的其他数据(例如电子邮件地址等)保存在该类中。 然后,我创建了一个UserDetailsS​​ervice实现: 最后一步是在“安全性”配置中添加UserDetailsS​​ervice。 我在控制台中看到“ loadUserByName”被调用了两次(由于“ Found