Grails 3.2.2 spring-security-ui覆盖RegisterController不工作

时间:2017-01-23 00:46:17

标签: grails spring-security grails-spring-security

我正在研究Grails 3.2.2插件,其中我试图覆盖spring-security-ui和RegisterController中的register.gsp。我使用了s2ui-override命令创建了我所需的控制器,目前我只添加了一个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>

紧跟身体标签后

UrlMappings

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

有趣的是,如果我在本地发布插件(我的.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

任何人都可以帮助我在哪里出错?我很乐意提供其他可能有用的资源。

1 个答案:

答案 0 :(得分:0)

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

<强> 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']

它现在有效!

我仍然愿意接受有关如何更好地处理这个问题的建议

相关问题