【问题标题】:Email field in user class and spring security ui plugin用户类和 spring security ui 插件中的电子邮件字段
【发布时间】:2017-01-25 18:49:15
【问题描述】:

我遇到了 spring security ui 插件的问题。我正在尝试向我的 SecUser 类(存储有关用户的信息)添加一个电子邮件字段。但是,使用 s2ui-override 生成的 Spring Security Management Console 中没有“电子邮件”字段。另一方面,由于文档的原因,这是可用的(link):

默认情况下,只有标准字段(username、enabled、accountExpired、accountLocked 和 passwordExpired)可用,但可以使用 grails s2ui-override 脚本自定义 - 请参阅配置部分。

我尝试使用 s2ui 覆盖脚本但没有效果。
我认为这很简单,但几个小时后我自己找不到解决方案。所以如果有人知道怎么做 - 请告诉我;)

在和我的用户类:

class SecUser {

    transient springSecurityService

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

    static constraints = {
        username blank: false, unique: true
        password blank: false
        email blank: false, email: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)
    }

    @Override
    public String toString(){
        return "User - "+username;
    }
}

【问题讨论】:

  • 我也有同样的问题。看来gsps必须手动修改。

标签: grails spring-security grails-plugin


【解决方案1】:

您可以从user/edit查看源代码视图:

    <table>
    <tbody>

        <s2ui:textFieldRow name='username' labelCode='user.username.label' bean="${user}"
                        labelCodeDefault='Username' value="${user?.username}"/>

        <s2ui:passwordFieldRow name='password' labelCode='user.password.label' bean="${user}"
                            labelCodeDefault='Password' value="${user?.password}"/>

        <s2ui:checkboxRow name='enabled' labelCode='user.enabled.label' bean="${user}"
                       labelCodeDefault='Enabled' value="${user?.enabled}"/>

        <s2ui:checkboxRow name='accountExpired' labelCode='user.accountExpired.label' bean="${user}"
                       labelCodeDefault='Account Expired' value="${user?.accountExpired}"/>

        <s2ui:checkboxRow name='accountLocked' labelCode='user.accountLocked.label' bean="${user}"
                       labelCodeDefault='Account Locked' value="${user?.accountLocked}"/>

        <s2ui:checkboxRow name='passwordExpired' labelCode='user.passwordExpired.label' bean="${user}"
                       labelCodeDefault='Password Expired' value="${user?.passwordExpired}"/>
    </tbody>
    </table>

没有电子邮件字段。您应该将 edit.gsp 和 create.gsp 文件从源代码复制到 grails-app/views/user/ 并在 username 字段后粘贴此代码进行编辑:

    <s2ui:textFieldRow name='email' labelCode='user.email.label' bean="${user}"
                    labelCodeDefault='email' value="${user?.email}"/>

您必须在 grails-app/i18n/ 路径中创建 spring-security-core-local.properties 并写入新属性

user.email.label=Email

当然,您应该在正确的域类中创建属性email

【讨论】:

    猜你喜欢
    • 2014-11-20
    • 2012-12-12
    • 2017-05-20
    • 2012-12-16
    • 2013-10-05
    • 2014-11-18
    • 2012-03-01
    • 2013-03-15
    • 2018-10-04
    相关资源
    最近更新 更多