我的代码为当前用户收集一个字符串,如下所示。

package timetracker2

import grails.timesecurity.*
import timetracker2.TimeController

class Time {

   def springSecurityService

   int id
   Project projectname
   Date dateCreated
   Date dateWorked
   Double timeSpent
   TimeClassification classification

   String currentUser = {
      String currentUser = springSecurityService.getCurrentUser()
      def user = springSecurityService.getCurrentUser()
      String username = user
      return username
   }

   static constraints = {
      timeSpent blank: false
      classification blank: true
   }

   static mapping = {
      table 'Time'
      cache true
      id column: 'Time_id'
      dateCreated column: 'Date_created'
      dateWorked column: 'Date_Worked'
      timeSpent column: 'Time_Spent'
      currentUser column: 'Username'
   }
}

这是我得到的字符串。
timetracker2.Time$_closure1@108115

这是怎么回事???任何帮助将不胜感激。

我也尝试使用get授权,并且尝试在我的person类中添加toString方法。 no没有成功。

最佳答案

我怀疑这里的问题是您在设置springSecurityService之前尝试使用它。声明中的初始化表达式

String currentUser = springSecurityService.getCurrentUser()

在构造对象时运行,但springSecurityService引用此时为null,因为它仅在构造函数完成后才注入(inject)。您可以将引用springSecurityService的代码放到beforeInsert事件中,这将使调用延迟到该对象首次保存到DB的位置。而且您可能想要principal.username而不是getCurrentUser()(感谢Burt Beckwith提供的指针)
class Time {
  def springSecurityService

  String currentUser
  // other fields...

  def beforeInsert() {
    currentUser = springSecurityService.principal.username
  }

10-04 14:29