我一直注意到我正在使用的很多教程都使用了这个:
def springSecurityService
因为我想只使用当前登录的用户来获取记录:
def user = params.id ? User.findByUserId(params.id) : User.get(springSecurityService.principal.id)
并且在我的Bootstrap中我想创建一个用户名和密码,例如
def user = new User(
username: username,
password: springSecurityService.encodePassword("tops3kr17"),
enabled: true)
但是我注意到没有创建密码,Spring Source Tools找不到方法.principal.id或.encodePassword(它们在STS中加下划线)并且想要在使用CTL +时使用带有大写字母S的SpringSecurityService SPACE(并且没有完成.principal.id或.encodePassword)。
所以我有点迷失,因为看起来教程已经过时了
那么我怎么能用我目前支持的方法做的描述呢?或者我错过了一些非常简单的东西? :)
class BootStrap {
def springSecurityService
def init = { servletContext ->
def demo = [
'jack' : [ fullName: 'Jack Demo Salesman'],
'jill' : [ fullName: 'Jill Demo Saleswoman']]
def now = new Date()
def random = new Random()
def userRole = SecRole.findByAuthority("ROLE_SALES") ?: new SecRole(authority: "ROLE_SALES").save()
def adminRole = SecRole.findByAuthority("ROLE_ADMIN") ?: new SecRole(authority: "ROLE_ADMIN").save()
def users = User.list() ?: []
if (!users) {
demo.each { username, password, userAttrs ->
def user = new User(
username: username,
password: springSecurityService.encodePassword('secret'),
enabled: true)
if (user.validate()) {
println "DEBUG: Creating user ${username}..."
println "DEBUG: and their password is ${password}"
user.save(flush:true)
SecUserSecRole.create user, userRole
users << user
}
else {
println("\n\n\nError in account bootstrap for ${username}!\n\n\n")
user.errors.each {err ->
println err
}
}
答案 0 :(得分:0)
使用注入的SpringSecurityService实例是正确的方法。
def springSecurityService
def foo() {
springSecurityService.principal
springSecurityService.encodePassword('fdsfads')
....
}
如果IDE无法识别,则说明IDE存在问题。