Как я могу хранить информацию в контексте веб-службы? - PullRequest
1 голос
/ 28 марта 2011

Я использую веб-сервис, который отвечает за вход пользователей. Если вход выполнен успешно, должен быть сгенерирован токен.

@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";
}

Я бы хотел сохранить токен в контексте приложения, но не знаю как. Токен должен существовать до тех пор, пока запущено приложение сервера. Есть ли у веб-сервиса собственный контекст приложения? Должен ли я использовать какой-нибудь HTTP-сервлет для хранения информации?

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

храните его в memcached , используя его, вы можете применить некоторую политику истечения срока действия, а также, если у вас более одного сервера, будет проблемой сохранить его в локальной памяти, сохранить его в global cache как memcached более уместен.

0 голосов
/ 01 апреля 2011

Я не совсем понимаю, что вы называете контекстом приложения.

Это ServletContext?Вы можете получить его на Джерси, используя аннотацию @Context: @Context ServletContext.Вы можете получить это либо как поле в вашем ресурсе, либо как параметр вашего метода.
ServletContext работает, а сервлет работает.Он может быть удален контейнером сервлета в зависимости от его конфигурации.

Кстати.Ваш дизайн действительно очень плохой и небезопасный.Вы используете GET для входа в систему и передаете имя пользователя и пароль в URL.Это означает несколько вещей:

  1. GET-запросы могут быть кэшированы посредниками.Вы хотите, чтобы это произошло?
  2. Все увидят пароль в URL.Даже если вы используете SSL, пароль останется в URL, который видят все.
  3. URL часто регистрируется как клиентом, так и сервером и посредниками.Вы действительно, действительно, действительно не хотите, чтобы пароль был зарегистрирован.

Я голосую за ваш вопрос, так как это отличный пример плохого дизайна для входа в систему.

...