Можно ли взломать аннотацию @Secured плагина core-security-core, чтобы иметь возможность ссылаться на параметры запроса, переданные контроллеру?
Я использую Grails 2.3.3
а также spring-security-core:2.0-RC4
плагин.
Я пытаюсь защитить действие контроллера, защищая его в зависимости от результата вызова метода из службы, которая принимает параметр. Этот параметр должен быть внутри параметров запроса.
Я хотел бы иметь возможность сделать следующее:
@Secured("@mySecurityService.myCustomCheck(params.id)")
def myAction(){
//do some things
}
Мне удалось сделать следующее:
@Secured("@mySecurityService.myCustomCheck()")
но теперь я понятия не имею, как получить доступ к параметрам запроса, которые отправляются на контроллер.
Можно ли даже архитектурно ссылаться params
переменные внутри @Secured
нотация?
PS: я знаю, что вы попросите меня использовать spring-security-acl
плагин. Моя проблема в том, что он также добавляет кучу других вещей, которые мне не нужны.
1 ответ
В 2.0 вы можете использовать замыкание в качестве проверки аннотации; краткая рецензия и пример в документации: https://grails-plugins.github.io/grails-spring-security-core/v2/guide/newInV2.html
Вы бы выразили свой пример так:
@Secured(closure={
ctx.mySecurityService.myCustomCheck(
request.getParameter('id'))
})
Вернуть true
разрешить доступ.
Обратите внимание, что ApplicationContext
доступно как ctx
переменная, а запрос как request
; это в дополнение к другим переменным и методам, которые доступны при использовании SpEL (подробности см. в документации по Spring Security). params
недоступен, но вы можете получить доступ к значениям, используя request.getParameter