Извините, если это очевидная вещь, но я новичок в программировании. У меня есть приложение, чтобы иметь возможность входить / регистрироваться пользователей, но как только я перехожу на другую страницу в приложении, а затем go обратно на страницу пользователя, оно действует так, как будто я не вошел в систему. Я не уверен, как заставить его помнить, что я вошел в систему. Я предполагаю, что мне нужно передать данные сеанса из моего пользовательского контроллера в мой другой класс контроллера. Но, честно говоря, я просто заблудился. Любая помощь будет принята с благодарностью.
Мой код аутентификации
public static final String userSessionKey = "user";
public User getUserFromSession(HttpSession session) {
Integer userId = (Integer) session.getAttribute(userSessionKey);
if (userId == null) {
return null;
}
Optional<User> user = userDao.findById(userId);
if (user.isEmpty()) {
return null;
}
return user.get();
}
public static void setUserInSession(HttpSession session, User user) {
session.setAttribute(userSessionKey, user.getId());
}
Мой код входа (событие после входа в систему, если я снова нажму вкладку входа в систему, он приведет меня к маршруту входа, а не маршрут учетной записи пользователя.)
@RequestMapping(value = "login", method = RequestMethod.GET)
public String displayLogin(HttpServletRequest session, Model model){
if (session.getAttribute(userSessionKey) == null){
model.addAttribute("title", "Login");
model.addAttribute("users", userDao.findAll());
return "user/login";
}
return "user/account";
}
@RequestMapping(value = "login", method = RequestMethod.POST)
public String processLogin(@RequestParam(name = "password") String password,
@RequestParam(name = "email")String email,
Model model){
for(User theUser: userDao.findAll()){
if(theUser.getEmail().equals(email) && theUser.getPassword().equals(password)) {
model.addAttribute("userAccount", theUser);
return "user/account";
}else{
model.addAttribute("invalidCredentials", true);
}
}
return "user/account";
}
Пример того, как я пытался протестировать его в моем другом классе (действительно не уверен, что мой подход даже близок)
@OneToOne
public UserController userController;
@Autowired
private PaoDao paoDao;
@Autowired
private UserDao userDao;
@RequestMapping(value = "remove", method = RequestMethod.GET)
public String displayRemovePaoForm(HttpSession session, Model model) {
if (userController.getUserFromSession() == null){
model.addAttribute("title", "Login");
model.addAttribute("users", userDao.findAll());
return "redirect:login";
}
model.addAttribute("paos", paoDao.findAll());
model.addAttribute("title", "Remove Pao");
return "pao/remove";
}
Все, что я хочу - войти в систему и оставаться в системе, пока я не выйду, я понятия не имею, как это сделать. Спасибо за любую помощь.