Приложение, которое у меня есть в работах, использует Grails 3. Я пытаюсь выполнить предварительную проверку подлинности, как описано в этом article, но мне трудно, поскольку я не могу понять, как отключить обычную аутентификацию, предоставленную grails 3 spring security plugin.Grails 3 Spring Security Pre Authentication
Вот мой текущий сценарий: Пользователь A попадает на мою веб-страницу. Я хочу проанализировать заголовки запроса и вынуть роли и имя пользователя. Если имя пользователя или роли пустые, я перенаправляю пользователя на какой-либо шлюз. Проще говоря, я хочу использовать весеннюю безопасность только для авторизации, вызывая статические правила, предоставляемые плагином. т.е.
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
[pattern: '/serviceb/**', access: "hasAnyRole('ROLE_COOL','ROLE_UNCOOL')"],
[pattern: '/cools/**', access: ['ROLE_ADMINS']],
[pattern: '/*', access: 'isAuthenticated()']
]
Это причина, я сделать не потребность весеннюю безопасность, чтобы сделать какие-либо функциональные возможности входа в систему, как first article состояний, мы можем использовать его только для проверки подлинности.
То, что я пробовал:
Во-первых, я удалил все связанные аутентификации вызовов в моем файле application.groovy (создается по умолчанию при запуске быстрого запуска для плагина), то есть строки подключения, фильтры поиска, но не статические правила
Далее я попытался использовать решение, предложенное этими двумя сообщений: on stack и это on blog.
Я создал фильтр, чтобы продлить AbstractPreAuthenticatedProcessingFilter
package Cool.service.authentication
import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter
import javax.servlet.http.HttpServletRequest
class CGAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter {
@Override
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) { "username" }
@Override
protected Object getPreAuthenticatedCredentials(HttpServletRequest request) { "N/A" }
}
Мой загрузки конфигурации теперь выглядит следующим образом:
import grails.plugin.springsecurity.SecurityFilterPosition
import grails.plugin.springsecurity.SpringSecurityUtils
class BootStrap {
def init = { servletContext ->
SpringSecurityUtils.clientRegisterFilter('CGAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER.order)
}
}
И мои пружинные ресурсы выглядеть следующим образом:
import Cool.service.authentication.CGAuthenticationFilter
beans = {
myAuthenticationFilter(CGAuthenticationFilter) {
authenticationManager = ref('authenticationManager')
checkForPrincipalChanges = true
}
}
И наконец, добавили эту строку в мою конфигурацию application.groovy для весеннего секьюрита у плагина:
grails.plugin.springsecurity.providerNames = ['preAuthenticatedAuthenticationProvider', 'anonymousAuthenticationProvider']
Однако я получаю супер ошибку geneirc при попытке запустить приложение, где сервер «терпит неудачу», чтобы начать и Java возвращает ненулевое значение обратно. Это заставляет меня поверить, что я возглавляю неправильное направление, и реализация полностью неверна.
Почему вы хотите отключить весеннюю безопасность ?! И что ты пробовал? И, пожалуйста, пройдите через какой-то сценарий использования, который должен быть достигнут. –
@MikelisBaltruks нормально, я добавил больше деталей. Я не хочу отключать весеннюю безопасность, только отключить функцию входа. Заголовок будет содержать необходимую мне информацию. & Сценарий использования сценария начинается во втором абзаце – angryip