在Grails中显示Spring Security类的属性

时间:2014-01-21 05:17:50

标签: grails spring-security

这是我的用户类,上面有Spring Security

package rms

import java.util.Date;
import java.util.Set;

import enums.EmployeeStatus;

class User {

   transient springSecurityService

   String username
   String password
   boolean enabled
   boolean accountExpired
   boolean accountLocked
   boolean passwordExpired


   String firstName
   String lastName
   String middleName
   String contactNumber
   String position
   String emailAddress
   String employeeID
   Date dateOfBirth
   EmployeeStatus employeeStatus
   int age
   byte [] picture

   static hasMany = [employeeReport: EmployeeReport]

   static constraints = {
      picture maxSize:20* 1024 * 1024
      dateOfBirth nullable: true
      employeeStatus blank: false
      position blank: false
      contactNumber blank: false
      emailAddress blank: false, matches: "([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})", email: true
      age min: 18

      username blank: false, unique: true
      password blank: false, password: true
   }

   static mapping = { password column: '`password`' }

   Set<SecRole> getAuthorities() {
      SecUserSecRole.findAllBySecUser(this).collect { it.secRole } as Set
   }

   def beforeInsert() {
      encodePassword()
   }

   def beforeUpdate() {
      if (isDirty('password')) {
         encodePassword()
      }
   }

   protected void encodePassword() {
      password = springSecurityService.encodePassword(password)
   }

   String toString(){
      return "SecUser $username"
   }
}

我试过了这个标记<sec:loggedInUserInfo field="username"/>,但它运行正常,但这不起作用<sec:loggedInUserInfo field="firstName"/>。它给出了一个

  

没有这样的属性:class的firstName:org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser

是否有其他方法可以显示当前登录用户的其他属性?

1 个答案:

答案 0 :(得分:2)

loggedInUserInfo只能访问“主体”中的数据,“主体”通常是GrailsUser的实例。数据包括用户名,ID,分配的角色名称以及一些关于用户是否已启用,帐户已锁定等的布尔值。可以轻松创建自己的GrailsUser并创建自己的UserDetailsService并捕获在身份验证期间来自用户域类的其他数据,并将其存储在GrailsUser子类中以使其可用于此标记;有关详细信息,请参阅http://grails-plugins.github.io/grails-spring-security-core/docs/manual.1273/guide/11%20Custom%20UserDetailsService.html

如果数据是只读的,这很有效,因为它将被缓存,直到用户注销或会话过期。如果要显示的数据可以更改,请检索用户实例并将其添加到从控制器操作返回的模型映射中:

class MyController {

   def springSecurityService

   def theAction() {
       ...
       def user = springSecurityService.currentUser
       [user: user, foo: 5, bar: "whatever", ...]
   }
}

然后您可以在GSP中显示您想要的任何内容,例如: ${user.firstName}