Установка аутентификации true с помощью Spring Security + Spring Session - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть проект Spring Security + Spring Session + Spring Boot и контроллер с настраиваемым методом входа в систему POST.У меня есть собственные средства для проверки учетных данных клиента.Как только проверка прошла успешно, каков лучший способ получить доступ к сеансу и установить для идентификации значение true?

Я пробовал это безрезультатно:

    @PostMapping("/login")
    public ResponseEntity loginSubmit(@RequestBody LoginForm form) {
        Errors errors = authenticationService.validateLoginForm(form);
        if (!errors.hasErrors()) {
            CustomerDTO result = authenticationService.findCustomerByEmailAndPassword(form);
            boolean success = (result != null && result.getId() != null);
            SecurityContextHolder.getContext().getAuthentication().setAuthenticated(success);
            return new ResponseEntity(result, HttpStatus.OK);
        } else {
            return new ResponseEntity(errors.getAllErrors(), HttpStatus.OK);
        }
    }

Как мне поступитьэто вместо этого?

1 Ответ

0 голосов
/ 19 декабря 2018

Вместо того, чтобы писать собственную конечную точку, я бы предложил интегрировать в среду Spring Security, внедрив свой собственный org.springframework.security.authentication.AuthenticationProvider

Или просто сделать это

public void login(HttpServletRequest req, String user, String pass) { 
    UsernamePasswordAuthenticationToken authReqz = new UsernamePasswordAuthenticationToken(user, pass);
    Authentication auth = authManager.authenticate(authReq);

    SecurityContext sc = SecurityContextHolder.getContext();
    sc.setAuthentication(auth);
    HttpSession session = req.getSession(true);
    session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, sc);
}

Подробное объяснение можно найти здесь

...