Java


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


Пред-проверка

Для того, что бы реализовать оповещение слоя отображения о действиях которые разрешено производить с объектом модели, мы создадим дополнительный интерфейс который будет содержать 3 метода - boolean isReadable(),boolean isDeletable() и boolean isAddable() после чего создадим в классе Album методы реализующие данный интерфейс и возвращающие всегда true. Слой отображения будет отображать ссылку «удалить» только если метод isDeletable() даст добро. А в нашем авторизационном аспекте создадим pointuct перехватывающие соответствующие методы всех классов реализующих данный интерфейс. После чего создадим around advice, который будет возвращать результат вызова системы авторизации. Захват параметров производится точно так же, как это было сделано при пост-проверке.

Изменённый аспект:

package aop.example;

import aop.example.model.*; import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException;

/** * Авторизационный аспект * @author Zubairov Renat */ public aspect AuthorizationAspect {

/** * pointcut включающий в себя метод
с ServletRequest для * того что бы потом можно было
бы получить его в объединении * с другим pointcut (паттерн "червоточина") */ pointcut requestMethod
(ServletRequest request) : execution(* aop.example.EntranceFilter.
doFilter(ServletRequest, ServletResponse,
FilterChain)) && args(request, ServletResponse,
FilterChain);

/** * pointcut определяющий метод фильтра
в котором мы будем отлавливать * исключение */ public pointcut doFilterMethod
(ServletRequest srequest, ServletResponse
sresponse, EntranceFilter filter) : execution(void aop.example.
EntranceFilter.doFilter(ServletRequest,
ServletResponse, FilterChain)) && args(srequest,
sresponse, FilterChain) && this(filter);

// все методы производящие чтение информации
объектов модели pointcut readMethods(Object object)
: execution (public * aop.example.model.
*.get*(..)) && this(object);

// все методы производящие добавление
объектов модели pointcut addMethods(Object object)
: execution (public * aop.example.model.
*.add*(..)) && this(object);




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