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 Webアプリケーションを作成します。ブートストラップで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`
が良い回避策はありますか?