2013-09-24 94 views
2

安装Spring Security的核心不记录作为插件然后做快速入门春季安全Grails核心在

这里是我的用户领域类

package auth 
class User { 
    def springSecurityService 
    String username 
    String password 
    boolean enabled 
    boolean accountExpired 
    boolean accountLocked 
    boolean passwordExpired 
    static mapping = { 
      // password is a keyword in some sql dialects, so quote with backticks 
      // password is stored as 44-char base64 hashed value 
     password column: '`password`', length: 64 
    } 
    static constraints = { 
     username blank: false, size: 1..50, unique: true 
     password blank: false, size: 8..100 
    } 


    Set getAuthorities() { 
     UserRole.findAllByUser(this).collect { it.role } as Set 
    } 

    def beforeInsert() { 
    encodePassword() 
    } 

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

    protected encodePassword() { 
     password = springSecurityService.encodePassword(password, username) 
    } 
} 

而且我boostrap.groovy是

class BootStrap { 

    def init = { servletContext -> 

    auth.User james = new auth.User(username: 'test', enabled: true, password: 'password') 
    james.save() 
    if (james.hasErrors()) 
    { 
     println("he has errors") 
    } 


    println("we made it! ") 
} 

    def destroy = { 
    } 
} 

但当我登录时,它会一直说“对不起,我们无法找到具有该用户名和密码的用户。”有什么想法吗?

回答

2

这是因为您在编码密码时使用salt

password = springSecurityService.encodePassword(password, username) 

我不知道腌制,因此不能引导你很多。

但是如果你不加入盐,然后你的代码作品编码密码,只是编码密码时删除用户名,试试这个

password = springSecurityService.encodePassword(password) 

希望这有助于。

0

您可以验证用户是否实际引导到数据库中?

如果是这样,我遇到了类似的问题,与Tomcat缓存一些数据不正确。

这里是我做过什么:

  1. 停止Tomcat的
  2. 删除Tomcat的Temp目录
  3. 重启动Tomcat的

之后,所有的文件,它工作得很好。

让我知道这是否有帮助。

+0

所以我使用intellij和使用tomcat插件。还使用内存数据库。这只是涉及到删除和添加tomcat插件? – Badmiral

+0

不,我不这么认为。但是,另一个人问了一个类似的问题,并说清理该项目帮助:http://stackoverflow.com/questions/18985126/grails-2-3-0-view-rendering-issue/18985225#18985225 –

0

此外,自从我从头开始构建Grails网站之后,它已经有一段时间了,但我想我记得有些在线说明存在问题。 SpringSecurity可能会为你编码密码,所以当你这样做时,它会变得双编码

尝试删除编码密码的行。

+0

试过这个,得到了相同的结果:( – Badmiral

1

如果创建BootStrap.groovy用户,尝试改变这一点:

def adminUser = User.findByUsername('admin') ?: new User(
    username: 'admin', 
    password: springSecurityService.encodePassword('admin'), 
    enabled: true).save(failOnError: true) 

这样:

def adminUser = User.findByUsername('admin') ?: new User(
    username: 'admin', 
    password: 'admin', 
    enabled: true).save(failOnError: true) 

的问题是,您所使用的编码密码两次,一次是在域和一次在构造函数的参数中。