2

Я устанавливал Grails (2.3.7) приложение с использованием пружинный безопасности жильный: 2.0.0 + весна-безопасности остальное: 1.4.1 плагины в чтобы иметь два типа auth, statefull auth для Интернета и один для мобильных устройств с использованием токенов (без гражданства). Все хорошее, базовое http auth работает хорошо. Попытка пройти аутентификацию с помощью клиента POSTMAN для отдыха до http://localhost:8080/api/login с именем пользователя и паролем в запросе полезной нагрузки я получаю 401 Несанкционированный, я не могу понять почему? Что отсутствует в конфигурации ниже? Любая помощь высоко ценится. я попробовал, а с пружинного безопасности-отдыха: 1.5.0, но я получил тот же результат, 401.Grails весна отдых безопасность/апи/войти в систему 401 Несанкционированное

BuildConfig.groovy

plugins { 
    ... 
    compile ":spring-security-core:2.0.0" 
    compile ":spring-security-rest:1.4.1", { 
     excludes ('spring-security-core') 
    } 
... 
} 

Config.groovy

/Added by the Spring Security Core plugin: 
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/general' 
grails.plugin.springsecurity.userLookup.userDomainClassName = 'org.sali.Users.SecUser' 
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'org.sali.Users.SecUserSecRole' 
grails.plugin.springsecurity.authority.className = 'org.sali.Users.SecRole' 
grails.plugin.springsecurity.securityConfigType = "Annotation" 

grails.plugin.springsecurity.roleHierarchy = ''' 
    ROLE_ADMIN > ROLE_OPERATOR 
''' 
grails.plugin.springsecurity.useSwitchUserFilter = true 

grails.plugin.springsecurity.controllerAnnotations.staticRules = [ 
     '/j_spring_security_switch_user': ['permitAll'], 
     '/api/**': ['permitAll'] 
] 


grails.plugin.springsecurity.filterChain.chainMap = [ 
     //'/api/**': 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter',// Stateless chain 
     '/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter', 
     '/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter',           // Traditional chain 
] 
//gorm 
grails.plugin.springsecurity.rest.token.storage.useGorm = true 
grails.plugin.springsecurity.rest.token.storage.gorm.tokenDomainClassName = 'org.sali.Rest.AuthenticationToken' 
grails.plugin.springsecurity.rest.token.storage.gorm.tokenValuePropertyName = 'token' 
grails.plugin.springsecurity.rest.token.storage.gorm.usernamePropertyName = 'username' 


//login 
grails.plugin.springsecurity.rest.login.active=true 
grails.plugin.springsecurity.rest.login.useJsonCredentials = true 
grails.plugin.springsecurity.rest.login.failureStatusCode = 401 
grails.plugin.springsecurity.rest.login.usernamePropertyName = 'username' 
grails.plugin.springsecurity.rest.login.passwordPropertyName='password' 
grails.plugin.springsecurity.rest.login.endpointUrl='/api/login' 
grails.plugin.springsecurity.rest.login.useRequestParamsCredentials = false 

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

//token generation 
grails.plugin.springsecurity.rest.token.generation.useUUID=false 
grails.plugin.springsecurity.rest.token.generation.useSecureRandom=true 

//token rendering 
grails.plugin.springsecurity.rest.token.rendering.usernamePropertyName='username' 
grails.plugin.springsecurity.rest.token.rendering.authoritiesPropertyName='roles' 
grails.plugin.springsecurity.rest.token.rendering.tokenPropertyName='token' 

//token validate 
grails.plugin.springsecurity.rest.token.validation.useBearerToken = true 

//if disable 'Bearer', you can configure a custom header. 
//grails.plugin.springsecurity.rest.token.validation.useBearerToken = false 
//grails.plugin.springsecurity.rest.token.rendering.tokenPropertyName access_token 
//grails.plugin.springsecurity.rest.token.validation.headerName = 'x-auth-token' 
grails.plugin.springsecurity.rest.token.validation.active=true 
grails.plugin.springsecurity.rest.token.validation.endpointUrl='/api/validate' 



//grails.plugin.springsecurity.rest.token.validation.headerName = 'X-Auth-Token' 
//grails.plugin.springsecurity.rest.token.validation.useBearerToken = false 

//grails.plugin.springsecurity.password.algorithm = 'SHA-256' 
//grails.plugin.springsecurity.password.hash.iterations = 1 

//cors 

cors.enabled=true 
cors.url.pattern = '/api/*' 
cors.headers=[ 
     'Access-Control-Allow-Origin': '*', 
     'Access-Control-Allow-Credentials': true, 
     'Access-Control-Allow-Headers': 'origin, authorization, accept, content-type, x-requested-with,X-Auth-Token', 
     'Access-Control-Allow-Methods': 'GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS', 
     'Access-Control-Max-Age': 3600 
] 

UrlMappings.groovy

class UrlMappings { 

    static mappings = { 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(controller: "login") 
     "404"(view:'/error') 
     "405"(view:'/error') 
     "500"(view:'/error') 
     "/login/$action?"(controller: "login") 
     "/logout/$action?"(controller: "logout") 

    } 
} 

Любые идеи приветствуются. Thx

+0

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

+0

Какой контроллер вы имеете в виду? Поскольку я знаю, что плагин для безопасности безопасности весны выставляет это/api/login для auth. Даже если я поставил точку останова, как вы сказали, она не будет достигнута. – user226578

+0

Ваша конфигурация кажется правильной. Если я не ошибаюсь, в случае неудачи входа, сервер будет отвечать кодом ошибки 401 из-за этой конфигурации - «grails.plugin.springsecurity.rest.login.failureStatusCode = 401'. Идея точки останова заключалась в том, чтобы подтвердить, что запрос достигнут кодового кода, и нет ничего плохого в фильтрах для этого конкретного URL-адреса. –

ответ

0

После добавления их в Config.groovy в работал:

grails.plugin.springsecurity.password.algorithm = 'SHA-256' 
grails.plugin.springsecurity.password.hash.iterations = 1 
0

Если кто-то до сих пор ищет решение этого, и попытался правила, не повезло, проверьте, если классы являются правильными:

grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.site.User' 
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.site.UserRole' 
grails.plugin.springsecurity.authority.className = 'com.site.Role' 

В моем случае, я имел класс com.site.User и я создал com.site.user.User, что порождало эту проблему!

Ref: https://github.com/alvarosanchez/grails-spring-security-rest/issues/181#issuecomment-82260495

Смежные вопросы