Java


Авторизация - часть 4


/** * Before advice проверки на добавление */ before(ServletRequest request, Object object)
: addAccess(request, object) { if (!AuthHelper.isAbleToAdd(extractUser
(request), object)) { throw new AuthorizationException
("Add access not allowed"); } }

/** * Before advice проверки на удаление */ before(ServletRequest request, Album album) :
deleteAccess(request, album) { if (!AuthHelper.isAbleToDelete
(extractUser(request), album)) { throw new AuthorizationException
("Delete access not allowed"); } }

/** * Around advice отлавливающий исключение * и отправляющий запрос на страницу с ошибкой */ void around(ServletRequest srequest,
ServletResponse sresponse, EntranceFilter filter)
throws IOException, ServletException : doFilterMethod(srequest,
sresponse, filter) { try { // выполняем метод фильтра proceed(srequest, sresponse, filter); } catch (AuthorizationException e) { // ловим исключение srequest.setAttribute("error_message",
e.getMessage()); // вперёд на страницу с сообщением
об ошибке filter.getConfig().getServletContext()
.getRequestDispatcher("error.vm")
.forward(srequest, sresponse); } }

/** * Приватная фунция которая вынимает
пользователя из запроса */ private AnonymousUser extractUser
(ServletRequest request) { return (AnonymousUser)((HttpServletRequest)
request).getSession().getAttribute(EntranceFilter.USER_KEY); }

}

Обратите внимание, что для удаления альбома мы используем немного отличный от остальных pointcut, это связанно с тем, что метод удаляющий альбомы принадлежит не классу Album, а классу AlbumList, кроме того, альбом, подлежащий удалению, передаётся как параметр метода. Как видно из решения язык определения pointcut AspectJ с лёгкостью справился и с такой задачей.

Для примера попробуйте ввести в строку браузера следующий запрос:

http://localhost:8080/view?delete=Picture%20of%20%3Cb%3Euser2%3C/b%3E

Будучи не зарегистрированным в системе (должна отобразиться страница с логином), или под пользователем User1 (должна отобразиться страница с ошибкой, т.к. производится попытка удалить альбом, не принадлежащий текущему пользователю).




Начало  Назад  Вперед



Книжный магазин