Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security как обрабатывать AccessDeniedException / 17 сообщений из 17, страница 1 из 1
24.05.2013, 14:06:42
    #38272106
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
Как я понял используя подход основанный на аннотациях(например @PreAuthorize("hasRole('ROLE_ROLE123')") ), исключения будет всегда одно и тоже AccessDeniedException. Но хочется, чтобы сообщения пользователю были различными, в зависимости от метода где произошло исключение. Как это правильно делается? Т.е. хотел бы механизм, который используюся в Hibernate Validator, где в аннотации можно указать параметр message="". Сейчас я оборачиваю вызов метода, который помечен аннотацией @PreAuthorize, в блок try catch

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
try {
            service.change(...);

        } catch (AccessDeniedException ex) {
            
            return error("ошибка 123");
            
        }


//..... Service


@PreAuthorize("hasRole('ROLE_ROLE123')")
    public void change(...) {}
...
Рейтинг: 0 / 0
24.05.2013, 14:13:30
    #38272139
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
А покажи stacktrace. Надо найти тот класс, который выкидывает исключение и переопределить его на что-то что умеет добавлять message либо врапить исключение дополнительной инфой.
Можно свою прокси изобрести поверх спринговой, которая будет ловить AccessDeniedException и по какой-то своей аннотации или другому признаку вычислять новый message.
Честно говоря не очень понятно какой полезный текст туда можно дописать...
...
Рейтинг: 0 / 0
24.05.2013, 14:17:42
    #38272154
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
BlazkowiczА покажи stacktrace. Надо найти тот класс, который выкидывает исключение и переопределить его на что-то что умеет добавлять message либо врапить исключение дополнительной инфой.
Можно свою прокси изобрести поверх спринговой, которая будет ловить AccessDeniedException и по какой-то своей аннотации или другому признаку вычислять новый message.
Честно говоря не очень понятно какой полезный текст туда можно дописать...
Ну к примеру, есть методы на уровне сервиса

addImage()
addText()
addVideo()

Было бы удобно если бы в аннотацию @PreAuthorize("hasRole('ROLE_ADDIMAGE')") можно было добавить параметр message="Вам нельзя добавлять картинку", который был бы доступен в исключении при его возникновении. Нет?
...
Рейтинг: 0 / 0
24.05.2013, 14:18:44
    #38272156
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
а так, во всех трех методах идентичные исключения, и везде одно сообщение писать("Отказано в доступе") как то не очень.
...
Рейтинг: 0 / 0
24.05.2013, 14:20:25
    #38272162
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
rdm,

Ну, тогда проще всего свой какой-то враппер написать. Или через AOP навесить глобальный интерцептор. Которы будет ловить именно это исключение. Анализировать stacktrace на предмет проблемного метода. И уже либо через рефлексию, либо по имени метода менять\добавлять текст ошибки.
...
Рейтинг: 0 / 0
24.05.2013, 14:23:27
    #38272172
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
Blazkowiczrdm,

Ну, тогда проще всего свой какой-то враппер написать. Или через AOP навесить глобальный интерцептор. Которы будет ловить именно это исключение. Анализировать stacktrace на предмет проблемного метода. И уже либо через рефлексию, либо по имени метода менять\добавлять текст ошибки.
Т.е. как я сейчас делаю, просто вызывая такие методы в блоке try catch это плохо?
...
Рейтинг: 0 / 0
24.05.2013, 14:26:33
    #38272184
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
rdmТ.е. как я сейчас делаю, просто вызывая такие методы в блоке try catch это плохо?
На 100 service методов у вас будет 100 try catch только для того чтобы добавить текст? А как же DRY?
...
Рейтинг: 0 / 0
24.05.2013, 14:28:12
    #38272192
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
BlazkowiczrdmТ.е. как я сейчас делаю, просто вызывая такие методы в блоке try catch это плохо?
На 100 service методов у вас будет 100 try catch только для того чтобы добавить текст? А как же DRY?
Я надеялся, что есть классическое решение этого вопроса)
...
Рейтинг: 0 / 0
24.05.2013, 14:29:43
    #38272196
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
rdmЯ надеялся, что есть классическое решение этого вопроса)
Не знаю на счет классического. Посмотрел исходники Spring. Для PreAuthorize не нашел.
...
Рейтинг: 0 / 0
24.05.2013, 14:32:12
    #38272205
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
Есть AccessDeniedHandler для SpringMVC
...
Рейтинг: 0 / 0
24.05.2013, 14:33:09
    #38272214
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
...
Рейтинг: 0 / 0
24.05.2013, 14:33:27
    #38272217
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
BlazkowiczrdmЯ надеялся, что есть классическое решение этого вопроса)
Не знаю на счет классического. Посмотрел исходники Spring. Для PreAuthorize не нашел.
Может я что-то глобально не понимаю? Методы же явно могут ограничивать совершено разные функции.
Соответственно и реакция(в простейшем случае сообщение) должны быть разными на одно и тоже исключение.
...
Рейтинг: 0 / 0
24.05.2013, 14:35:27
    #38272221
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
rdmМетоды же явно могут ограничивать совершено разные функции.
5 раз прочитал, так и не понял что это значит.
...
Рейтинг: 0 / 0
24.05.2013, 14:37:01
    #38272222
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
rdmСоответственно и реакция(в простейшем случае сообщение) должны быть разными на одно и тоже исключение.
Так не бывает. Есть несколько конкретных случаев, когда отдельное исключение можно как-то обработать.
В подавляющем большинстве случаев все исключение приводят к одному и тому же: откатили транзакцию, записали в лог, показали юзеру.
...
Рейтинг: 0 / 0
24.05.2013, 14:41:40
    #38272237
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
BlazkowiczrdmМетоды же явно могут ограничивать совершено разные функции.
5 раз прочитал, так и не понял что это значит.
Не суть важно)
...
Рейтинг: 0 / 0
24.05.2013, 14:43:12
    #38272240
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
BlazkowiczrdmСоответственно и реакция(в простейшем случае сообщение) должны быть разными на одно и тоже исключение.
Так не бывает. Есть несколько конкретных случаев, когда отдельное исключение можно как-то обработать.
В подавляющем большинстве случаев все исключение приводят к одному и тому же: откатили транзакцию, записали в лог, показали юзеру. Вот последний пункт "показали юзеру". Можно написать "Отказано", а можно разные сообщения, в зависимости от того, что пользователь хотел сделать.
...
Рейтинг: 0 / 0
24.05.2013, 14:52:10
    #38272267
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security как обрабатывать AccessDeniedException
rdmв зависимости от того, что пользователь хотел сделать.
В большинстве случаев пользователь знает что он только что хотел сделать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security как обрабатывать AccessDeniedException / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]