Хороший способ сделать информацию об аутентификации и авторизации доступной между уровнями приложения - PullRequest
4 голосов
/ 16 мая 2010

У меня есть веб-приложение, работающее на Google App Engine (GAE) для JAVA.Я проверяю подлинность клиента на уровне сервлета, но хотел бы сделать информацию о клиенте доступной для моего уровня бизнеса и данных без необходимости передавать объект клиента через аргументы каждой отдельной функции.

Я рассматриваю возможность создания объекта типа "сеанс" с помощью ThreadLocal.Таким образом, любая функция может просто сказать что-то вроде:

CurrentUser.getRoles();

Это хороший способ сделать это или есть что-то еще, что является более приемлемым решением?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 17 мая 2010

Это, вероятно, будет работать и будет очень удобно, но обычно я стараюсь избегать ThreadLocal s для подобных случаев, насколько это возможно. Причины:

  • Ваш код внезапно начинает зависеть от того факта, что базовый контейнер использует разные потоки для разных пользователей. Если контейнер начнет использовать NIO, потоки другого типа (например, зеленые потоки, которые не будут отображаться в java.lang.Thread на некоторых экзотических JVM) и т. Д., Вам не повезет.

  • ThreadLocal s, как правило, забывают очистить после их использования. Так что, если ваш сервер будет загружен, и один из пользователей поместит много вещей в «кеш», у вас может не хватить ОЗУ.

  • Вследствие того, что после запроса не выполняется очистка, ThreadLocal может выявить уязвимость системы безопасности, если предположить, что другой пользователь перейдет в тот же поток.

  • Наконец, я считаю, что ThreadLocal были разработаны для сред, в которых у вас есть абсолютный контроль над потоками в вашем контексте, и этот вариант использования слишком далеко зашёл.

К сожалению, я не знаю много о GAE, чтобы предложить жизнеспособную альтернативу, извините за это!

1 голос
/ 17 мая 2010

Если использование Spring и Spring Security работает для вас, вы можете использовать код, который я создал как часть jappstart , для вашей аутентификации / авторизации. Затем эта информация доступна через Spring Security.

1 голос
/ 17 мая 2010

ThreadLocals - это полностью приемлемый способ хранения такой информации. Кроме нас, я также знаю из под открытым небом , что они делают это.

...