Java


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


/** * Before advice проверки на чтение */ before(ServletRequest request, Object object)
: readAccess(request, object) { if (!AuthHelper.isAbleToRead
(extractUser(request), object)) { throw new AuthorizationException
("Read access not allowed"); } }

/** * 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 пред-проверки, здесь
мы игнорируем возвращаемое методом * значение, и всё время возвращаем
то которое удовлетворяет правилам * авторизации * Мы не обрабатываем остальные пред-проверки
т.к. по умолчанию любой может * читать, и все аутентифицированные
пользователи могут добавлять */ boolean around(ServletRequest request,
Object object) : deleteCheck(request, object) { return AuthHelper.isAbleToDelete
(extractUser(request), object); }

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

}

Достоинства АОП решения:

  • Как видно из определения аспектов readMethods, addMethods, controlledRead, controlledAdd и controlledDelete мы не ссылаемся на определённые классы, следовательно, авторизация будет автоматически распространяться на все новые классы модели помещённые в пакет model и реализующие интерфейс Controllable.

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

  • Все вызовы методов классов модели (созданные согласно правилам) будут объектом для применения системы авторизации.

  • Слой отображения не зависит от системы авторизации.

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

Для наглядного примера можно создать несколько новых альбомов под одним из пользователей, а потом зарегистрироваться под другим. Ссылки «удалить» будут проставлены только у «своих» альбомов, кроме того попытки удаления чужих альбомов через непосредственное редактирование get запросов приведут к странице с ошибкой.




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



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