Grails 3.2.2 spring安全ui覆盖RegisterController不工作



我正在开发一个Grails 3.2.2插件,在该插件中,我试图从spring安全ui和register.gsp覆盖RegisterController。我使用了s2ui覆盖命令,该命令为我创建了所需的控制器,目前我只添加了一个println来查看它的工作情况,但它似乎仍在使用原始控制器。到目前为止,我有:

注册控制器

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"
}
}

寄存器.gsp与原来的相同,只添加了

<p style="color:red;"> HELLLOOOOOOO </p>

紧接在身体标签之后

URL映射

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

尽管当去"注册/其他行动"时,我得到了:

IN MY CONTROLLER
userDetailsService = grails.plugin.springsecurity.userdetails.GormUserDetailsService@10ed50b0

有趣的是,如果我在本地发布插件(我的.m2dir)并将其导入应用程序,我会在控制台中获得我的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

有人能帮我解决哪里出了问题吗?我很乐意提供任何其他可能有所帮助的资源。

所以我有一个修复方法(也许是一个变通方法):

注册控制器

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' 
}
}

MyPluginGrailPlugn.groovy

def loadAfter = ['springSecurityCore', 'springSecurityUi', 'springSecurityRest']

现在它起作用了!

我仍然对如何处理这个更好的持开放态度

最新更新