gpt4 book ai didi

java - Spring Boot中如何记住用户?

转载 作者:行者123 更新时间:2023-12-01 16:54:05 25 4
gpt4 key购买 nike

抱歉,如果这是显而易见的事情,但我在编程方面非常陌生。我的应用程序能够登录/注册用户,但是一旦我导航到应用程序中的不同页面,然后返回到用户页面,它就像我尚未登录一样。我不确定如何让它记住我已经登录。我假设我需要将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com