Grails Spring Security: Fazer login com um URL de destino ignora o fluxo de trabalho de autenticação de post

Em meu aplicativo grails, personalizei o fluxo de trabalho de pós-autorização escrevendo um manipulador de sucesso de autenticação customizado (em resources.groovy), conforme mostrado abaixo.

authenticationSuccessHandler (MyAuthSuccessHandler) {
    def conf = SpringSecurityUtils.securityConfig
    requestCache = ref('requestCache')
    defaultTargetUrl = conf.successHandler.defaultTargetUrl
    alwaysUseDefaultTargetUrl = conf.successHandler.alwaysUseDefault
    targetUrlParameter = conf.successHandler.targetUrlParameter
    useReferer = conf.successHandler.useReferer
    redirectStrategy = ref('redirectStrategy')
    superAdminUrl = "/admin/processSuperAdminLogin"
    adminUrl = "/admin/processAdminLogin"
    userUrl = "/admin/processUserLogin"
}

Como você pode das últimas três linhas no fechamento acima, dependendo da função concedida ao usuário do logging, estou redirecionando-a para ações separadas dentro doAdminController onde um UserSessionBean customizado é criado e armazenado na sessão.

Funciona bem para um login normal, que no meu aplicativo é assim:

O usuário acessa o aplicativo por meio dehttp://localhost:8080/my-app/ OUhttp://localhost:8080/my-app/login/authEla digita seu ID de login e senha válidos e continua.O aplicativo acessa internamente o MyAuthSuccessHandler, que redireciona para o AdminController considerando a função concedida a esse usuário.O UserSessionBean é criado e armazenado na sessãoO usuário é levado para a página inicial do aplicativo

Eu também escrevi um costumeMyUserDetailsService estendendoGormUserDetailsService que é acessado corretamente no fluxo acima.

CENÁRIO DE PROBLEMAS:
Considere um usuário acessando diretamente um recurso protegido (neste caso, o controlador é protegido@Secured anotação) dentro do aplicativo.

Cliques do usuáriohttp://localhost:8080/my-app/inbox/indexApp redireciona-a parahttp://localhost:8080/my-app/login/authO usuário digita seu ID de login e senha válidosUsuário é levado parahttp://localhost:8080/my-app/inbox/index

oMyAuthSuccessHandler é ignorado inteiramente neste processo e, portanto, meuUserSessionBean não é criado levando a erros após uso posterior em locais onde oUserSessionBean é acessado.

QUESTÕES:

No cenário do problema, o aplicativo pula aMyAuthSuccessHandler porque há um URL de destino para o redirecionamento no login?Podemos forçar o processo a sempre passarMyAuthSuccessHandler mesmo com o URL de destino presente?Se a resposta a 2 é não, existe uma alternativa sobre como e onde oUserSessionBean ainda pode ser criado?

questionAnswers(2)

yourAnswerToTheQuestion