2017-05-08 6 views
2

this post의 지침에 따라 grails-spring-security-rest plugin을 사용하여 첫 번째 grails 응용 프로그램을 빌드하려고합니다.구성 요소에 ''이라는 bean이 필요합니다. 찾을 수 없습니다.

--- 
grails: 
    profile: rest-api 
    codegen: 
     defaultPackage: ras 
    spring: 
     transactionManagement: 
      proxies: false 
info: 
    app: 
     name: '@[email protected]' 
     version: '@[email protected]' 
     grailsVersion: '@[email protected]' 
spring: 
    main: 
     banner-mode: "off" 
    groovy: 
     template: 
      check-template-location: false 

# Spring Actuator Endpoints are Disabled by Default 
endpoints: 
    enabled: false 
    jmx: 
     enabled: true 

--- 
grails: 
    mime: 
     disable: 
      accept: 
       header: 
        userAgents: 
         - Gecko 
         - WebKit 
         - Presto 
         - Trident 
     types: 
      json: 
       - application/json 
       - text/json 
      hal: 
       - application/hal+json 
       - application/hal+xml 
      xml: 
       - text/xml 
       - application/xml 
      atom: application/atom+xml 
      css: text/css 
      csv: text/csv 
      js: text/javascript 
      rss: application/rss+xml 
      text: text/plain 
      all: '*/*' 
    urlmapping: 
     cache: 
      maxsize: 1000 
    controllers: 
     defaultScope: singleton 
    converters: 
     encoding: UTF-8 

--- 
hibernate: 
    cache: 
     queries: false 
     use_second_level_cache: true 
     use_query_cache: false 
     region.factory_class: org.hibernate.cache.ehcache.EhCacheRegionFactory 

dataSource: 
    pooled: true 
    jmxExport: true 
    driverClassName: com.mysql.jdbc.Driver 
    dialect: org.hibernate.dialect.MySQL5InnoDBDialect 
    username: ******* 
    password: ******* 

environments: 
    development: 
     dataSource: 
      dbCreate: create-drop 
      url: jdbc:mysql://localhost:3306/ras_dev?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=false 
    test: 
     dataSource: 
      dbCreate: create-drop 
      url: jdbc:mysql://localhost:3306/ras_test?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=false 
    production: 
     dataSource: 
      dbCreate: update 
      url: jdbc:mysql://localhost:3306/ras?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8 
      properties: 
       jmxEnabled: true 
       initialSize: 5 
       maxActive: 50 
       minIdle: 5 
       maxIdle: 25 
       maxWait: 10000 
       maxAge: 600000 
       timeBetweenEvictionRunsMillis: 5000 
       minEvictableIdleTimeMillis: 60000 
       validationQuery: SELECT 1 
       validationQueryTimeout: 3 
       validationInterval: 15000 
       testOnBorrow: true 
       testWhileIdle: true 
       testOnReturn: false 
       jdbcInterceptors: ConnectionState 
       defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED 

응용 프로그램 :

| Running application... 
2017-05-07 20:18:54.614 WARN --- [   main] g.p.s.SpringSecurityCoreGrailsPlugin  : 
Configuring Spring Security Core ... 

Configuring Spring Security Core ... 
2017-05-07 20:18:54.688 WARN --- [   main] g.p.s.SpringSecurityCoreGrailsPlugin  : ... finished configuring Spring Security Core 

... finished configuring Spring Security Core 


Configuring Spring Security REST 2.0.0.M2... 
... finished configuring Spring Security REST 

     ... with GORM support 
2017-05-07 20:19:00.278 DEBUG --- [ost-startStop-1] o.s.s.w.a.i.FilterSecurityInterceptor : Validated configuration attributes 
2017-05-07 20:19:00.527 DEBUG --- [ost-startStop-1] g.p.s.r.t.g.jwt.FileRSAKeyProvider  : Loading public/private key from DER files 
2017-05-07 20:19:00.531 DEBUG --- [ost-startStop-1] g.p.s.r.t.g.jwt.FileRSAKeyProvider  : Public key path: /mnt/dev/Workspaces/LZR.RAS/RAS-API/security/public_key.der 
2017-05-07 20:19:00.538 DEBUG --- [ost-startStop-1] g.p.s.r.t.g.jwt.FileRSAKeyProvider  : Private key path: /mnt/dev/Workspaces/LZR.RAS/RAS-API/security/private_key.der 
2017-05-07 20:19:00.612 DEBUG --- [ost-startStop-1] g.p.s.rest.RestTokenValidationFilter  : Initializing filter 'restTokenValidationFilter' 
2017-05-07 20:19:00.612 DEBUG --- [ost-startStop-1] g.p.s.rest.RestTokenValidationFilter  : Filter 'restTokenValidationFilter' configured successfully 
2017-05-07 20:19:00.612 DEBUG --- [ost-startStop-1] o.s.s.w.a.ExceptionTranslationFilter  : Initializing filter 'restExceptionTranslationFilter' 
2017-05-07 20:19:00.612 DEBUG --- [ost-startStop-1] o.s.s.w.a.ExceptionTranslationFilter  : Filter 'restExceptionTranslationFilter' configured successfully 
2017-05-07 20:19:00.613 DEBUG --- [ost-startStop-1] o.s.security.web.FilterChainProxy  : Initializing filter 'filterChainProxy' 
2017-05-07 20:19:00.613 DEBUG --- [ost-startStop-1] o.s.security.web.FilterChainProxy  : Filter 'filterChainProxy' configured successfully 
2017-05-07 20:19:00.613 DEBUG --- [ost-startStop-1] g.p.s.rest.RestLogoutFilter    : Initializing filter 'restLogoutFilter' 
2017-05-07 20:19:00.613 DEBUG --- [ost-startStop-1] g.p.s.rest.RestLogoutFilter    : Filter 'restLogoutFilter' configured successfully 
2017-05-07 20:19:00.613 DEBUG --- [ost-startStop-1] g.p.s.rest.RestAuthenticationFilter  : Initializing filter 'restAuthenticationFilter' 
2017-05-07 20:19:00.613 DEBUG --- [ost-startStop-1] g.p.s.rest.RestAuthenticationFilter  : Filter 'restAuthenticationFilter' configured successfully 
2017-05-07 20:19:02.731 DEBUG --- [   main] o.s.s.a.h.RoleHierarchyImpl    : setHierarchy() - The following role hierarchy was set: 
2017-05-07 20:19:03.064 ERROR --- [   main] o.s.b.d.LoggingFailureAnalysisReporter : 

*************************** 
APPLICATION FAILED TO START 
*************************** 

Description: 

A component required a bean named '' that could not be found. 


Action: 

Consider defining a bean named '' in your configuration. 

여기 내 application.yml 내용은 다음과 같습니다 나는 그것이 나에게 다음과 같은 출력을 제공하는 응용 프로그램을 실행하려고하면 그러나

. 그루비 넘버

grails.plugin.springsecurity.useSecurityEventListener = true 
grails.plugin.springsecurity.securityConfigType = 'InterceptUrlMap' 

grails.plugin.springsecurity.rememberMe.persistent = true 

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

grails.plugin.springsecurity.rest.token.storage.jwt.useEncryptedJwt = true 
grails.plugin.springsecurity.rest.token.storage.jwt.privateKeyPath = 'security/private_key.der' 
grails.plugin.springsecurity.rest.token.storage.jwt.publicKeyPath = 'security/public_key.der' 

grails.plugin.springsecurity.rest.token.rendering.authoritiesPropertyName = 'permissions' 
grails.plugin.springsecurity.rest.token.rendering.usernamePropertyName = 'username' 

grails.plugin.springsecurity.rest.token.generation.useSecureRandom = true 

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

grails.plugin.springsecurity.filterChain.chainMap = [ 
    ['/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter'], // Stateless chain 
    ['/data/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter'], // Stateless chain 
    ['/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'] // Traditional chain 
] 

grails.plugin.springsecurity.interceptUrlMap = [ 
    [pattern: '/',    access: ['permitAll']], 
    [pattern: '/assets/**',  access: ['permitAll']], 
    [pattern: '/partials/**', access: ['permitAll']], 
    [pattern: '/**/js/**',  access: ['permitAll']], 
    [pattern: '/**/css/**',  access: ['permitAll']], 
    [pattern: '/**/images/**', access: ['permitAll']], 
    [pattern: '/**/favicon.ico', access: ['permitAll']], 
    [pattern: '/api/login',  access: ['permitAll']], 
    [pattern: '/api/logout',  access: ['isFullyAuthenticated()']], 
    [pattern: '/api/validate', access: ['isFullyAuthenticated()']], 
    [pattern: '/**',    access: ['isFullyAuthenticated()']] 
] 

resources.groovy

import ras.bean.DefaultSecurityEventListener 
import ras.auth.DefaultJsonPayloadCredentialsExtractor 

beans = { 
    credentialsExtractor(DefaultJsonPayloadCredentialsExtractor) 
    defaultSecurityEventListener(DefaultSecurityEventListener) 
} 

Grails의 버전 :

$ grails --version 
| Grails Version: 3.2.6 
| Groovy Version: 2.4.7 
| JVM Version: 1.8.0_121 

UPDATE 1

나는에 선 다음 추가 나는이 오류를 수정하는 방법에 대한 제안을 정말 감사하겠습니다

위에 게시 된 logback.groovy

logger("org.springframework.security", DEBUG, ['STDOUT'], false) 
logger("grails.plugin.springsecurity", DEBUG, ['STDOUT'], false) 
logger("org.pac4j", DEBUG, ['STDOUT'], false) 

그러나, 콘솔 출력 및 stacktrace.log 파일은 동일한 출력을 가지고있다.

+0

스프링 라이브러리는 유익한 스택 추적을 제공하는 데 대개 매우 유용합니다. 그것은 여기에있는 것처럼 보이지 않습니다. 더 나은 정보를 얻기 위해 로깅 수준을 낮출 수 있습니까? – BalRog

답변

0

마지막으로, 나는이 문제를 해결할 수 있었다 :

문제를 1 : 나는 사용자 역할 및 UserRole 클래스 대신 수동으로 설명

grails s2-quickstart com.app-name User Role 

로 사용하여 만든 here

2 호 : chainMap 필터에 잘못된 형식이 사용되었습니다. 여기 나를 위해 일한 사람이 있습니다

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,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter'], // Stateless chain 
    [pattern: '/data/**', filters: 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter'], // Stateless chain 
    [pattern: '/**',  filters: 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'] // Traditional chain 
]