Java 如何在web服务的上下文中存储信息?

Java 如何在web服务的上下文中存储信息?,java,web-services,rest,jersey,jax-rs,Java,Web Services,Rest,Jersey,Jax Rs,我使用一个负责用户登录的web服务。如果登录成功,则应生成令牌 @GET @Produces(MediaType.TEXT_PLAIN) @Path("/login") public String login(@QueryParam("userName") String name, @QueryParam("password") String password) { //Spring Securtity Check HttpResponse r =

我使用一个负责用户登录的web服务。如果登录成功,则应生成令牌

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/login")
public String login(@QueryParam("userName") String name,
        @QueryParam("password") String password) {
            //Spring Securtity Check
    HttpResponse r =loginResponse(name,password);
    String s = r.getFirstHeader("Location").toString();
    boolean isError = s.contains("login_error");
    if(!isError){
        //TODO store Token in the application context 

        MD5 token = new MD5(name+System.currentTimeMillis());
        return "token:"+token.getMD5();
    }
    return "fail";
}

我想在应用程序上下文中存储令牌,但不知道如何存储。只要服务器应用程序正在运行,令牌就应该存在。web服务是否有自己的应用程序上下文?我应该使用某种HTTP servlet来存储信息吗?

我不太理解您所说的应用程序上下文

是ServletContext吗?您可以使用
@Context
注释在Jersey获得它:
@Context-ServletContext
。您可以将其作为资源中的字段或方法的参数获取。
ServletContext已启动,而servlet已启动。servlet容器可能会根据其配置删除它

顺便说一句,你的设计真的很糟糕,很不安全。您可以使用GET进行登录操作,并在url上传递用户名和密码。这意味着几件事:

  • GET请求可以由中介缓存。你想让它发生吗
  • 每个人都会在url中看到密码。即使您使用SSL,密码仍然会在url中,每个人都可以看到
  • URL通常由客户端、服务器和中介机构记录。你真的,真的,真的不想记录密码

  • 我赞成你的问题,因为这是一个很好的登录设计示例。

    我不太理解你所说的应用程序上下文

    是ServletContext吗?您可以使用
    @Context
    注释在Jersey获得它:
    @Context-ServletContext
    。您可以将其作为资源中的字段或方法的参数获取。
    ServletContext已启动,而servlet已启动。servlet容器可能会根据其配置删除它

    顺便说一句,你的设计真的很糟糕,很不安全。您可以使用GET进行登录操作,并在url上传递用户名和密码。这意味着几件事:

  • GET请求可以由中介缓存。你想让它发生吗
  • 每个人都会在url中看到密码。即使您使用SSL,密码仍然会在url中,每个人都可以看到
  • URL通常由客户端、服务器和中介机构记录。你真的,真的,真的不想记录密码
  • 我投票支持你的问题,因为这是一个很好的登录设计示例。

    将其存储在中,使用它你可以应用一些过期策略,而且当你有多台服务器时,将其存储在本地内存中是一个问题,将其存储在
    全局缓存中,就像memcached更合适。

    将其存储在中,使用它,您可以应用一些过期策略,而且当您有多台服务器时,将其存储在本地内存中、存储在
    global cache
    中将是一个问题,就像memcached更合适一样