Grails 3, Spring Security Rest имя пользователя после входа в систему - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть приложение Grails 3 с реализованным Spring Security Rest, я могу успешно пройти аутентификацию из своего приложения Angular2, а с помощью @Secured (), примененной к контроллерам, можно контролировать, к каким областям приложения можно получить доступ.Итак, учитывая это, я знаю, что аутентификация и авторизация работает.

Я пытаюсь получить имя пользователя, вошедшего в систему, которое использовалось для аутентификации.

Я пытался Authentication authentication = SecurityContextHolder.getContext().getAuthentication() , это ноль.

Я пытался Principal principal = request.getUserPrincipal()это также нуль.

Вот мое application.groovy

    grails.plugin.springsecurity.providerNames = ['customADAuthProvider']
    grails.plugin.springsecurity.successHandler.alwaysUseDefault = true
    grails.plugin.springsecurity.userLookup.userDomainClassName = 'User'
    grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'UserRole'
    grails.plugin.springsecurity.authority.className = 'Role'
    grails.plugin.springsecurity.controllerAnnotations.staticRules = [
        [pattern: '/',               access: ['permitAll']],
        [pattern: '/error',          access: ['permitAll']],
        [pattern: '/index',          access: ['permitAll']],
        [pattern: '/index.gsp',      access: ['permitAll']],
        [pattern: '/shutdown',       access: ['permitAll']],
        [pattern: '/assets/**',      access: ['permitAll']],
        [pattern: '/**/js/**',       access: ['permitAll']],
        [pattern: '/**/css/**',      access: ['permitAll']],
        [pattern: '/**/images/**',   access: ['permitAll']],
        [pattern: '/**/favicon.ico', access: ['permitAll']]
    ]

    grails.plugin.springsecurity.filterChain.chainMap = [
        [pattern: '/assets/**',      filters: 'none'],
        [pattern: '/**/js/**',       filters: 'none'],
        [pattern: '/**/css/**',      filters: 'none'],
        [pattern: '/**/images/**',   filters: 'none'],
        [pattern: '/**/favicon.ico', filters: 'none'],
        [pattern: '/api/**',         filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter']
]

    grails.plugin.springsecurity.rest.logout.endpointUrl = '/api/logout'

Независимо от того, что я пытаюсь, я никогда не смогу получить объект аутентификации или основной объект для получения имени пользователя или каких-либо сведений о пользователе.

Я использую spring-security-rest:2.0.0.RC1, а Grails 3.3.6

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете сделать что-то вроде этого ...

class SomeController {

    def springSecurityService

    def someAction() {
        def user = springSecurityService.currentUser
            // ...
    }
}

Или это ...

class SomeController {

    def springSecurityService

    def someAction() {
        def principal = springSecurityService.principal
        String username = principal.username
        def authorities = principal.authorities // a Collection of GrantedAuthority
        boolean enabled = principal.enabled
        // ...
    }
}

Оба они вставлены непосредственно из https://grails -плагинов.github.io / Grails-весна-безопасности ядро ​​/ 3.2.x / index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...