2011-03-28 33 views
1

我使用负责用户登录的Web服务。如果登录成功,则应该生成令牌。如何将信息存储在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来存储信息吗?

回答

0

我不太明白你所说的应用程序上下文。

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

Btw。你的设计真的很糟糕,不安全。您使用GET进行登录操作,并在URL上传递用户名和密码。这意味着几件事情:

  1. GET请求可以由中介缓存。你想让它发生吗?
  2. 每个人都会在url中看到密码。即使你使用SSL,密码仍然会在网址中显示给大家。
  3. URL通常会被客户端,服务器和中介记录下来。你真的真的不希望密码被记录下来。

我在投票你的问题,因为这是一个不好的登录设计的好例子。

1

储存于memcached,使用它你可以将一些过期策略,以及当你有一个以上的服务器,这将是它存储在本地存储的问题,将其存储在global cache像memcached是更apropariate 。

+0

或redis - > http://redis.io/ – martyglaubitz 2012-10-15 15:21:34

相关问题