У меня такая же ситуация. Извините, что воскресил старую ветку, но все равно ...
Вместо того, чтобы помещать тикет в строку запроса, почему бы не включить его в качестве заголовка HTTP, в частности, заголовка авторизации, например:
Authorization: Token ABCD1234-1234-1234-1234-ABCD1234ABCD
Вы также можете принять Basic auth. Это позволяет вам использовать API из веб-браузера без каких-либо модных плагинов или расширений. Заголовок будет выглядеть так:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Затем в своем коде на стороне сервера используйте HttpServletFilter для защиты всего доступа к вашему RestEasyServlet. В методе doFilter прочитайте заголовок авторизации. Только вызывайте chain.doFilter (который передаст запрос в RestEasyServlet), если заголовок проверен. Если его там нет или он просрочен или недействителен и т. Д., То из вашего фильтра верните HTTP 401.
Если ваш заголовок аутентификации начинается с "Token", удалите первые шесть символов, а затем возьмите оставшуюся часть значения и выполните поиск в таблице базы данных сеанса или на карте. Если он там и не истек, пропустите их.
Если ваш заголовок аутентификации начинается с «Basic», удалите первые шесть символов, а Base64 расшифруйте остальные. Разделите на ":" и используйте два токена, чтобы найти пользователя в вашей базе данных.
Я тоже немного обманываю в своем фильтре. Так как мне все равно приходится искать этот токен (или имя пользователя / пароль) из базы данных, я создаю объект User из ResultSet и сохраняю его в ThreadLocal на фильтре. Затем я предоставляю статический метод для моего фильтра, который позволяет мне получить доступ к «текущему пользователю» из любой точки JVM. Я использую команду try / finally в своем фильтре, чтобы очистить ThreadLocal, чтобы он всегда очищался после завершения запроса.