1

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

默认情况下,只有标准字段(用户名、启用、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;
    }
}
4

1 回答 1

0

您可以从用户/编辑视图查看源代码:

    <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/ 并在用户名字段后粘贴此代码进行编辑:

    <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

当然,您应该在正确的域类中创建属性电子邮件。

于 2013-04-08T14:29:17.110 回答