我正在使用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/