grails - springSecurityService如何不以明文形式存储密码?

标签 grails spring-security

本教程:

http://spring.io/blog/2010/08/11/simplified-spring-security-with-grails/

说您应该像这样创建用户:

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

但是,这不起作用。仅在执行以下操作时有效:
           password: 'admin'

我假设(但可能是错误的)将密码以纯文本(未哈希)存储在内部数据库中。

有没有办法告诉spring加密或哈希密码?它不在任何教程中,并且在手册中找不到
Grails 2.3.6,安全核心2.0-RC2和UI,默认安装。

我已经看到它说grails默认情况下会使用bcrypt进行哈希处理,但是我不知道如何验证这一点。我想我需要安装mysql,告诉grails使用它,然后我就可以查询值了。

最佳答案

深吸一口气。默认情况下,Grails(最新版本)的spring安全插件不会以明文形式存储密码。

查看您的SecUser域类,您将看到它正在为您处理密码的加密。您还可以在documentation中看到一个示例。

这直接来自文档。

package com.mycompany.myapp
class User {

   transient springSecurityService

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

   static transients = ['springSecurityService']

   static constraints = {
      username blank: false, unique: true
      password blank: false
   }

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

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

   def beforeInsert() {
      encodePassword()
   }

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

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

如果您尚未阅读文档,建议您这样做。它写得很好,并且可能会回答您有关该插件的许多其他问题。

关于grails - springSecurityService如何不以明文形式存储密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22834902/

相关文章:

java - spring security j_spring_security 注销问题

spring-security - 如何使用 Spring LDAP 和 Spring security 更改密码

Spring ,属性文件,空值

grails - 如何使用不显示 401 请求的登录对话框的基本身份验证实现来实现 Grails spring 安全核心?

oracle - 如何使用Oracle 11g数据库在Grails中更新hibernate_sequence?

grails - 如何在 Geb grails 中设置和拆卸功能测试数据

java - Spring Security OpenID - 无法处理声明的身份 "null"

grails - 在 Controller 之外使用 bindData 方法

unit-testing - Grails/Groovy-使用多个@TestMixin

spring-boot - 如何加快Spring Boot 2.0基本身份验证的速度?