grails - Grails 3.2.2 spring-security-ui覆盖RegisterController不起作用

标签 grails spring-security grails-spring-security

我正在使用Grails 3.2.2插件,在其中尝试覆盖spring-security-ui和RegisterController中的register.gsp。我使用了s2ui-override命令,该命令已为我创建了所需的 Controller ,此刻我仅添加了一个println以使其正常运行,但似乎仍将继续使用原始命令。到目前为止,我有:

RegisterController

import org.springframework.security.core.userdetails.UserDetailsService
import org.springframework.security.core.userdetails.UserDetails
import grails.plugin.springsecurity.ui.RegisterCommand

class RegisterController extends grails.plugin.springsecurity.ui.RegisterController {

static defaultAction = 'register'

UserDetailsService userDetailsService

@Override
def register(RegisterCommand registerCommand) {
    println "IN MY CONTROLLER!!"
    def registerReturn = super.register(registerCommand)
    if (registerReturn?.emailSent) {
        UserDetails createdUser = userDetailsService.loadUserByUsername(registerCommand.username)

        println "New user ${createdUser}"
    }
    registerReturn
}

def otherAction() {
    println "IN MY CONTROLLER!!"
    println "userDetailsService = ${userDetailsService}"
    "Hellloooo"
}

}

register.gsp 与原始相同,仅添加
<p style="color:red;"> HELLLOOOOOOO </p>

紧贴 body 标签之后

网址映射
class UrlMappings {

static mappings = {
    "/$controller/$action?/$id?(.$format)?"{
        constraints {
            // apply constraints here
        }
    }

    "/"(view:"/index")
    "500"(view:'/error')
    "404"(view:'/notFound')
 }
}

运行应用程序时的结果:
我可以在顶部看到示例红色文本,但是在控制台中看不到输出,尽管在运行应用程序时会收到警告。转到“注册” URL时的控制台输出:
 Running application...
 WARNING: The [register] action accepts a parameter of type [grails.plugin.springsecurity.ui.RegisterCommand] which does not implement grails.validation.Validateable.  Data binding will still be applied to this command object but the instance will not be validateable.

   @Override
   ^

 Configuring Spring Security Core ...
 ... finished configuring Spring Security Core


 Configuring Spring Security UI ...
 ... finished configuring Spring Security UI


Configuring Spring Security REST 2.0.0.M2...
 ... finished configuring Spring Security REST

Grails application running at http://localhost:8060 in environment: development

虽然当我去“register / otherAction”时,我得到:
IN MY CONTROLLER
userDetailsService = grails.plugin.springsecurity.userdetails.GormUserDetailsService@10ed50b0

有趣的是,如果我在本地发布插件(我的.m2目录)并将其导入到应用中,则会在控制台中获取我的printlns,我的gsp现在未使用(我看不到我的红色Hello文本)。控制台输出:
IN MY CONTROLLER!!
// unimportant mailing error
New user grails.plugin.springsecurity.userdetails.GrailsUser@364492: Username: test; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: false; Granted Authorities: ROLE_NO_ROLES

任何人都可以帮助我解决哪里问题?我很乐意提供其他可能有用的资源。

最佳答案

所以我有一个解决方法(也许是一种解决方法):

RegisterController

class RegisterController extends grails.plugin.springsecurity.ui.RegisterController {

static namespace = 'my-great-plugin'

UserDetailsService userDetailsService

@Override
def register(RegisterCommand registerCommand) {
    println "IN MY CONTROLLER!!"
    def registerReturn = super.register(registerCommand)
    println "Got return from super call ${registerReturn}"
    if (registerReturn?.emailSent) {
        UserDetails createdUser = userDetailsService.loadUserByUsername(registerCommand.username)
        println "New user ${createdUser}"
    }
    registerReturn
}

def otherAction() {
    println "IN MY CONTROLLER"
    println "userDetailsService = ${userDetailsService}"
    "Hellloooo"
}

MyPluginUrlMappings.groovy
static mappings = {
    "/register/$action?/$id?(.$format)?" { 
        controller = 'register' 
        namespace = 'my-great-plugin' 
    }
}

MyPluginGrailsPlugn.groovy
 def loadAfter = ['springSecurityCore', 'springSecurityUi', 'springSecurityRest']

现在就可以了!

我仍然愿意就如何更好地处理这一问题提出建议

关于grails - Grails 3.2.2 spring-security-ui覆盖RegisterController不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797782/

相关文章:

grails - 编写条件以模仿联接查询

grails - 使用域模型作为命令对象时如何限制属性绑定(bind)

grails - 如何在 grails 的 spock 单元测试中测试方法调用和重定向的顺序?

java - 使用 Spring Security 3 散列和加盐密码

java - 一个 @PreAuthorize ("hasAuthority(' ACCOUNT OWNER')"有效,另一个非常相似 - 抛出 SpelEvaluationException

Spring Security maxSession 不起作用

grails - 如何处理 grails spring-security-rest 插件中的自定义身份验证异常?

json - 如何从 JSON 外部文件加载或引导数据到 grails 中?

grails - 如何根据拒绝访问的原因使Grails的Spring Security Core呈现不同的页面

grails - 无法执行 s2ui-覆盖布局