Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Как сделать авторизацию в Play Framework

#java #веб_программирование #playframework


Делаю сайт на Java с PlayFramework 2.3.9!
Надо написать свою авторизацию с наличием групп пользователей(admin/user/guest) и
logout без использования инструментов Play.
    


Ответы

Ответ 1



Разруливать авторизацию и доступ можно как и в Spring фильтрами. Напишите фильтр, который будет проверять сессию пользователя. Неавторизованных - кидать на страницу входа, у авторизованных - смотреть права и проверять, куда они лезут. Выход из системы - специальный url, который очистит сессию пользователя или отметит его как незалогиненного, а потом редиректнет на главную.

Ответ 2



Курите SpringSecurity Можно например так: Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!(authentication instanceof AnonymousAuthenticationToken)) { String currentUserName = authentication.getName(); return currentUserName; }

Ответ 3



Для play 2.2.2 можно сделать так. Более новый play не проверял. Контроллер public class UserController extends Controller { protected static String COOKIE_NAME = "user"; public static Result login() { //Считываем значения из формы: DynamicForm requestData = Form.form().bindFromRequest(); String login = requestData.get("login"); String password = requestData.get("password"); if(userExists(login, password)){ session(COOKIE_NAME, login); Logger.info("User found"); }else{ Logger.info("User not found"); } return redirect(package.Application.index()); } public static Result logout() { session().remove(COOKIE_NAME); return redirect(package.Application.index()); } public static boolean isLoggedIn() { return session(COOKIE_NAME) != null; } public static String getSession() { return session(COOKIE_NAME); } } В маршрутах: POST /login package.UserController.login() GET /logout package.UserController.logout() Сессия в PLAY хранится в кукисах на стороне клиента, то есть она видима для пользователя, но ее нельзя отредактировать (целостность контролируется). Если не нравится, что пользователи могут видеть, что именно хранится в сессии - можно шифровать значения перед записью каким-нибудь AES. (У меня вообще там Java объект в Json формате шифрованный AES) Если не нравится сам метод хранения, можно создать в БД табличку с сессиями, на метод login() сохранять в нее значения и sessionid. и пользователю уже конкретно писать в кукис sessionid вместо user.

Комментариев нет:

Отправить комментарий