用springboot实现用户登录以及获取当前用户登录信息
时间: 2023-09-24 10:02:48 浏览: 53
好的,关于你的问题,我可以给你一些思路和代码示例。
首先,用户登录通常需要一个登录页面和一个登录接口。我们可以通过Spring Boot的`@Controller`注解来定义一个Controller来处理这些请求。具体实现如下:
```java
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/login")
public String loginPage() {
return "login"; // 返回登录页面
}
@PostMapping("/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password, HttpSession session) {
// 获取用户信息,验证用户登录
User user = userService.getUserByUsername(username);
if (user != null && user.getPassword().equals(password)) {
session.setAttribute("user", user); // 将用户信息存储在Session中
return "redirect:/home"; // 登录成功,跳转到首页
} else {
return "redirect:/login?error"; // 登录失败,跳转到登录页面并显示错误信息
}
}
}
```
以上代码中,我们通过`@GetMapping`和`@PostMapping`注解来定义登录页面和登录接口。在登录接口中,我们通过`@RequestParam`注解获取到前端传递过来的用户名和密码,然后使用`UserService`来获取用户信息,验证用户登录。如果登录成功,我们将用户信息存储在`HttpSession`中,然后重定向到首页。如果登录失败,则重定向到登录页面并显示错误信息。
接下来,我们需要在拦截器中获取当前登录用户的信息。这可以通过在拦截器中获取`HttpSession`对象,然后从中获取用户信息来完成。具体实现如下:
```java
@Component
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行拦截,可以在这里获取用户信息
User user = (User) request.getSession().getAttribute("user"); // 假设用户信息存在session中
if (user == null) {
response.sendRedirect("/login"); // 如果用户未登录,则跳转到登录页面
return false;
}
return true;
}
// 其他方法省略
}
```
以上代码中,我们通过`request.getSession().getAttribute("user")`来获取当前登录用户的信息。如果用户未登录,则跳转到登录页面。如果已经登录,则可以继续处理请求。
最后,需要注意的是,在登录成功后,我们将用户信息存储在`HttpSession`中。如果用户在一段时间内没有操作,`HttpSession`可能会失效,导致用户需要重新登录。因此,我们需要在拦截器中对`HttpSession`进行检查,确保用户已经登录。如果用户未登录,则需要将请求重定向到登录页面。