Java 如何在web服务的上下文中存储信息?
我使用一个负责用户登录的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 =
@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上传递用户名和密码。这意味着几件事:
我赞成你的问题,因为这是一个很好的登录设计示例。我不太理解你所说的应用程序上下文 是ServletContext吗?您可以使用
@Context
注释在Jersey获得它:@Context-ServletContext
。您可以将其作为资源中的字段或方法的参数获取。ServletContext已启动,而servlet已启动。servlet容器可能会根据其配置删除它 顺便说一句,你的设计真的很糟糕,很不安全。您可以使用GET进行登录操作,并在url上传递用户名和密码。这意味着几件事:
全局缓存中,就像memcached更合适。将其存储在中,使用它,您可以应用一些过期策略,而且当您有多台服务器时,将其存储在本地内存中、存储在global cache
中将是一个问题,就像memcached更合适一样