Grails 3.2.8의 컨트롤러에서 springSecurityService.currentUser를 가져올 수 없습니다.Grails 3.2.8 컨트롤러에서 springSecurityService.currentUser를 가져올 수 없습니다.
Grails 3.2.8은 Spring Security Core를 위반하는 것으로 보이는 이전 버전과는 달리 성능이 향상되었습니다. Grails 3.2.8 dependency injection in domain classes에 따르면 grails.gorm.autowire = true로 설정하여 그 비 호환성을 수정했습니다.
단계 재현 :
은 역할 및 그룹을 사용하여 봄 보안 3.1.1 새로운 Grails의에게 3.2.8 웹 응용 프로그램을 만듭니다. 부트 스트랩에서 application.yml에서
설정 grails.gorm.autowire = 사실
:
def init = { servletContext -> User user = new User(username: 'foo', password:'foo').save(flush: true) Role role = new Role(authority: 'SomeRole').save(flush: true) RoleGroup roleGroup = new RoleGroup(name: 'SomeRole').save(flush: true) RoleGroupRole.create(roleGroup, role) UserRoleGroup.create(user, roleGroup) }
는 컨트롤러 TestController 만들기 :
@Secured(['SomeRole']) class TestController { def springSecurityService def index() { println "springSecurityService==null? ${(springSecurityService==null).toString()}" println "SecurityContextHolder.context==null? ${(SecurityContextHolder.context==null).toString()}" println "SecurityContextHolder.context?.authentication==null? ${(SecurityContextHolder.context?.authentication==null).toString()}" println "springSecurityService.principal==null? ${(springSecurityService.principal==null).toString()}" println "springSecurityService.currentUser==null? ${(springSecurityService.currentUser==null).toString()}" render "1" //Render something so we don't get an exception. } }
가 시작을 서버로 이동하여/test로 이동하십시오. 출력은 다음과 같습니다 좋은 해결 방법은
springSecurityService==null? false SecurityContextHolder.context==null? false SecurityContextHolder.context?.authentication==null? true springSecurityService.principal==null? true springSecurityService.currentUser==null? true`
있습니까?