场景描述:
非登录状态下,访问目标页面,登录之后直接进入目标页面而非首页
解决方案:
- 过滤器代码:
@WebFilter(urlPatterns = {"/user/userInfo"})
public class CheckLoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//获取请求对象
HttpServletRequest req = (HttpServletRequest) request;
//获取响应对象
HttpServletResponse res = (HttpServletResponse) response;
//从session中获取用户对象
User user = (User) req.getSession().getAttribute("user");
//如果用户为空
if (user == null) {
//通过请求对象获取请求地址
String uri = req.getRequestURI();
//添加请求地址到session中
req.getSession().setAttribute("uri", uri);
//打印请求地址
System.out.println("用户想要访问的地址:" + uri);
//重定向到用户登录页面
res.sendRedirect("/user/loginUI");
} else {
//否则直接放行
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
}
}
复制代码
- 控制器代码:
@Controller
@RequestMapping("/user")
public class UserController {
@PostMapping("/login")
public String login(HttpSession session, String username, String password,Model model) {
//通过用户名和密码查询用户
User user = userService.findOne(username, password);
//如果用户不为空,通过session获取用户对象
if (user != null) {
//保存登录状态
session.setAttribute("user", user);
//通过session获取请求地址
String uri = (String) session.getAttribute("uri");
//如果请求地址不为空,重定向到目标页面
if (uri != null) {
return "redirect:" + uri;
}
//否则回到首页
return "redirect:/";
}
//如果用户为空,返回错误信息
model.addAttribute("msg","用户名或密码错误");
//转发到登录页面
return "login";
}
}
复制代码