Добрый вечер всем, я пытаюсь решить проблему с Spring Boot, которая меня бесит ...
Я делаю простое веб-приложение (подробности на данном этапе не важны)с Spring Boot и AngularJS 1.5.1
Я сделал аутентификацию с помощью API отдыха, это:
@PostMapping("/login")
@ResponseBody
public UserLoginResponse login(@RequestBody UserLogin userLogin, HttpServletResponse response, HttpServletRequest req) {
UserLoginResponse resp;
HttpSession currentSession = req.getSession(true);
resp = new UserLoginResponse();
logger.info(MessageFormat.format("CALLED - Login from user {0}",userLogin.getEmail()));
resp.setId(userLogicManager.login(userLogin, currentSession));
if(resp.getId() == -1) {
response.setStatus(HttpStatus.NOT_FOUND.value());
logger.info(MessageFormat.format("ERROR - Login failed user {0}",userLogin.getEmail()));
currentSession.invalidate();
}
return resp;
}
Это вызывает его менеджер логики, здесь:
public Long login(UserLogin userLogin, HttpSession session) {
User user;
Long res = new Long(-1), currTime;
Date loginDate;
logger.info(MessageFormat.format("LOGIC - Login user {0}", userLogin.getEmail()));
loginDate = new Date();
currTime = loginDate.getTime();
user = userRepository.findUserByEmailAndPassword(userLogin.getEmail(), hashString(userLogin.getPassword()));
if (user != null) {
user.setLastLogin(new Timestamp(currTime));
userRepository.save(user);
res = user.getId();
session.setAttribute("uid", user.getId());
logger.info(MessageFormat.format("LOGIC - COMPLETED - Login user {0}", userLogin.getEmail()));
}
return res;
}
Я делаю запрос следующим образом:
let loginUrl = mainConst.API_PROXY_URL;
let apiUrl = mainConst.API_BASE_URL + "user/login";
let requestParams = {
method: "POST",
url: loginUrl,
data: credentials,
headers : {
'Target-URL': apiUrl,
'Authorization': ""
},
withCredentials: true
};
$http(requestParams).then(success, fail);
Я прохожу через прокси-сервер nodejs для обработки CORS, который добавляетэто заголовки
res.header ("Access-Control-Allow-Origin", "http://localhost"); res.header (" Access-Control-Allow-Methods "," GET, PUT, PATCH,POST, DELETE "); res.header (" Access-Control-Allow-Headers ", req.header ('access-control-request-headers') +", Set-Cookie, Cookie ");
После этого звонка я правильно получаю этот заголовок с сервера:
set-cookie
SESSION = YjI5NzBjZjYtYmRiZC00Nz… jJiNzg4; Path = /; SameSite = Lax
ПРОБЛЕМА
Втчen я пытаюсь использовать этот сеанс, например, с этим API
@GetMapping("/restaurants")
@ResponseBody
public RestaurantResponse getRestaurants(HttpServletResponse response, HttpServletRequest req) {
HttpSession currentSession = req.getSession(false);
RestaurantResponse res = userLogicManager.getRestaurants(currentSession);
if(res == null) {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
logger.info("ERROR - Get restaurant failed - Not logged performer");
}
return res;
}
currentSession всегда равен нулю, даже если запрос к этому API имеет
Cookie
SESSION = YjI5NzBjZjYtYmRiZC00NzZmLTlkY2EtMDZjJiZxx1Z*
header.
Что я могу сделать, чтобы это исправить?Я пытаюсь сделать процесс аутентификации с помощью HttpSession, но это блокирует мой проект, я неделю пытаюсь его решить