springSecurityService.isLoggedIn () возвращает false внутри функции @MessageMapping - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь использовать простой чат, который требует, чтобы пользователь вошел в систему для использования. Я получил логин работает, и могу обнаружить его в контроллере с помощью springSecurityService.isLoggedIn (). Однако при вызове этой функции внутри обработчика чата он всегда будет возвращать false. Рассматриваемая функция:

@MessageMapping("/sendchat")
@SendTo("/topic/chats")
protected String sendchat(String getrequest) {
   log.info "\n\npre login"
   if(springSecurityService.isLoggedIn())
   {
      log.info "\n\n"+getrequest
      //do other things if successful
   }
   else
   {
      log.info "\n\nnot logged in"
   }

}

Она всегда будет выполнять оператор else, даже если функция index () контроллера правильно обнаружила пользователя, вошедшего в систему.

1 Ответ

0 голосов
/ 01 мая 2020

Это потому, что «springSecurityService» работает только для методов действия контроллера, плагин «spring-security-core» использует фильтры для настройки контекста безопасности, затем springSecurityService может получить статус входа пользователя.

Находясь в вашем коде, метод «защищен» и является соглашением о «подключаемом модуле веб-сокета», поэтому вы должны обеспечивать безопасность в соответствии с документом подключаемого модуля, например:

class ExampleController {

    @ControllerMethod
    @MessageMapping("/hello")
    @PreAuthorize("hasRole('ROLE_USER')")
    @SendTo("/topic/hello")
    String hello(String world) {
        return "hello from secured controller, ${world}!"
    }

    @ControllerMethod
    @MessageExceptionHandler
    @SendToUser(value = "/queue/errors", broadcast = false)
    String handleException(Exception e) {
        return "caught ${e.message}"
    }

}

Более подробные сведения могут ссылаться "https://github.com/zyro23/grails-spring-websocket#securing -message-хендлер-методы ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...