这是我的用户类,上面有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
是否有其他方法可以显示当前登录用户的其他属性?
答案 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}