Итак, в настоящее время я переношу классы действий struts 1 на Spring mvc, а также добавляю Spring Security. В более старой реализации происходит следующее: когда пользователь аутентифицируется, мы помещаем HashMap<String, AuthObj> в объект сеанса, где ключом для этого HashMap является роль / привилегия, а значение AuthObj - это объект, который содержит несколько реквизитов, связанных с этой конкретной «ролью» и этой конкретной ролью. пользователь, который был аутентифицирован.
Затем есть org.apache.struts.tiles.TilesRequestProcessor, который выполняется непосредственно перед вызовом любого действия struts, то, что мы делаем в этом TilesRequestProcessor, - это мы получаем доступ к конфигурации класса действий org.apache.struts.config.ActionConfig, чтобы прочитать роль / привилегию, необходимую для вызова этого конкретного класса действий, а затем добавить некоторые свойства в объект запроса / сеанса на основе «роли», необходимой для вызова этого класса действия, и ключ этого свойства одинаков для каждого класса действий, поэтому, когда мы позже обращаемся к этому свойству в классе действий, нам не нужно использовать другой ключ .
Мой вопрос заключался в том, как этого можно достичь с помощью Spring mvc и безопасности Spring, важно то, что когда мы помещаем этот объект в объект сеанса / запроса, ключ должен быть одинаковым для каждого класса действий, иначе мне придется изменить 100 методов в старый код, который я перехожу со стойки на Spring.
В моей новой реализации я использую аннотацию @Secured("ROLE") на контроллерах Spring mvc, я хочу получить доступ к значению аннотации @Secured("ROLE") на вызываемом контроллере на основе URL-адреса запроса с использованием фильтра, а затем установить параметр объекта запроса request.setParameter(key, value) на основе предоставленное значение аннотации, которое в данном случае является «РОЛЬ».
Я хотел знать, как мне получить доступ к этому значению аннотации и какой весенний фильтр безопасности я должен расширить, чтобы добавить параметр для запроса объекта request.setParameter(key, value), и этот параметр запроса также должен быть доступен в контроллере
@AlanHay АОП - один из способов сделать это, но если я добавлю АОП, он добавит еще один уровень в приложение, что еще больше увеличит сложность приложения, которого я не хочу. Мне было интересно, есть ли какой-нибудь объект SpringContext, который несет информацию, связанную с аннотациями @Secured, используемыми на контроллерах, к которым я мог бы получить доступ из фильтра ...




Посмотрите, как используют АОП для перехвата запросов. Если каждый метод с вашей аннотацией имеет HttpServleRequest в качестве параметра, вы можете установить значение в рекомендации. Иначе смотрим на использование хранилища
ThreadLocalв аспекте. См. Для начала: blog.jayway.com/2015/09/08/defining-pointcuts-by-annotations