2017-01-23 2 views
0

Я работаю над плагином Grails 3.2.2, в котором я пытаюсь переопределить RegisterController от spring-security-ui, а также register.gsp. Я использовал команду s2ui-override, которая создала мне необходимый контроллер, и на данный момент я только добавил println, чтобы увидеть, как он работает, но, похоже, все еще идет в исходное. До сих пор у меня есть:Grails 3.2.2 spring-security-ui override RegisterController не работает

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 

Хотя при переходе в «регистр/otherAction» Я получаю:

IN MY CONTROLLER 
userDetailsService = [email protected]10ed50b0 

Интересно, если я публикую плагин локально (мой .m2 dir) и импортировать его в приложение, я получаю мои printlns в консоли, BUT мой gsp теперь не используется (я не вижу свой красный текст Hello). Консольный выход:

IN MY CONTROLLER!! 
// unimportant mailing error 
New user [email protected]: Username: test; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: false; Granted Authorities: ROLE_NO_ROLES 

Кто-нибудь может помочь, где я буду не так? Я рад предоставить любые другие ресурсы, которые могут помочь.

ответ

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

И теперь это работает!

Я по-прежнему открыт для предложений о том, как справиться с этим лучше

Смежные вопросы