抱歉,如果这是显而易见的事情,但我在编程方面非常陌生。我的应用程序能够登录/注册用户,但是一旦我导航到应用程序中的不同页面,然后返回到用户页面,它就像我尚未登录一样。我不确定如何让它记住我已经登录。我假设我需要将 session 数据从我的用户 Controller 传递到我的其他 Controller 类。但老实说我只是迷路了。任何帮助将不胜感激。
我的验证码
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";
}
我如何在其他类(class)中尝试测试它的示例(真的不确定我的方法是否接近)
@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";
}
我想要的只是登录并保持登录状态直到注销,我不知道该怎么做。感谢您的帮助。
最佳答案
您必须使用存储类型来存储用户的 session 。 您可以使用两种存储类型:jdbc 和 redis
对于 JDBC 使用:application.properties 文件中的 spring.session.store-type=jdbc
属性。
添加 JDBC 依赖项:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-jdbc</artifactId>
</dependency>
对于redis使用:application.properties文件中的spring.session.store-type=redis
属性。
添加redis依赖:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
这可能会有所帮助..!!
关于java - Spring Boot中如何记住用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61625580/