Можно ли взломать аннотацию @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

Другие вопросы по тегам