SpringMVC自定义拦截器登录检测功能的实现代码

时间:2022-11-24 11:29:16

一、定义登录控制器

目录结构

SpringMVC自定义拦截器登录检测功能的实现代码

代码:

1、创建TUser类

  1. package com.demo.pojo;
  2.  
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6.  
  7. @Data
  8. @AllArgsConstructor
  9. @NoArgsConstructor
  10. public class TUser {
  11. private String name;
  12. private String password;
  13. }

2、创建LoginController类

  1. package com.demo.controller;
  2.  
  3. import com.demo.pojo.TUser;
  4. import com.demo.pojo.User;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.ui.Model;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestMethod;
  9. import org.springframework.web.bind.annotation.RequestParam;
  10.  
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import javax.servlet.http.HttpSession;
  14.  
  15. @Controller
  16. @RequestMapping("/user")
  17. public class LoginController {
  18. @RequestMapping("/login")
  19. public String login(Model model){
  20. model.addAttribute("msg","这里是登陆界面");
  21. return "login";
  22. }
  23.  
  24. @RequestMapping("/doLogin")
  25. public String doLogin(TUser tUser,
  26. HttpServletRequest req, HttpServletResponse resp, Model model){
  27. System.out.println("###LoginController.doLogin()");
  28.  
  29. if(!"admin".equals(tUser.getName())||!"admin".equals(tUser.getPassword())){
  30. model.addAttribute("msg","用户名或密码不正确!");
  31. return "loginFail";//跳转到loginFail.jsp
  32. }
  33.  
  34. HttpSession httpSession=req.getSession(true);//存在session则使用,不存在则创建
  35. httpSession.setAttribute("user",tUser);
  36. model.addAttribute("msg","登录成功");
  37. return "success";//跳转到success.jsp
  38. }
  39.  
  40. @RequestMapping("/loginOut")
  41. public String loginFail(HttpSession session,Model model){
  42. model.addAttribute("msg","退出登录");
  43. session.removeAttribute("user");
  44. return "login";
  45. }
  46.  
  47. }

页面代码:

1、login.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>login</title>
  5. </head>
  6. <body>
  7. <h1>${msg}</h1>
  8. <form id="login" action="${pageContext.request.contextPath}/user/doLogin" method="post">
  9. 用户名:<input type="text" name="name"/><br/>
  10. 密码:<input type="password" name="password"><br/>
  11. <input type="submit">
  12. </form>
  13.  
  14. </body>
  15. </html>

2、loginFail.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>loginFail</title>
  5. </head>
  6. <body>
  7. <h1>${msg}</h1>
  8. <h2><a href="${pageContext.request.contextPath}/user/loginOut" rel="external nofollow" rel="external nofollow" >返回登录界面</a></h2>
  9. </body>
  10. </html>

3、success.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>success</title>
  5. </head>
  6. <body>
  7. ${msg}
  8. <h2><a href="${pageContext.request.contextPath}/user/loginOut" rel="external nofollow" rel="external nofollow" >退出登录</a></h2>
  9. </body>
  10. </html>

二、自定义登录拦截器

代码:

1、创建LoginInterceptor类,作为拦截器类需实现HandlerInterceptor,并重写里面的三个方法preHandle、postHandle、afterCompletion:

  1. package com.demo.interceptor;
  2.  
  3. import org.springframework.web.servlet.HandlerInterceptor;
  4. import org.springframework.web.servlet.ModelAndView;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. public class LoginInterceptor implements HandlerInterceptor {
  10. @Override
  11. public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
  12. Object handler) throws Exception {
  13. System.out.println("LoginInterceptor preHandle");
  14. //放行:判断什么情况下
  15. //1、请求到登陆界面放行,首次登陆
  16. if(request.getRequestURI().contains("login")||request.getRequestURI().contains("doLogin")){
  17. return true;
  18. }
  19. //2、退出登录可直接放行
  20. if(request.getRequestURI().contains("loginOut")){
  21. return true;
  22. }
  23. //3、通过登录进入 放行
  24. if(request.getSession().getAttribute("user")!=null){
  25. return true;
  26. }
  27. //非法请求进行拦截
  28. //重定向到登录页面
  29. response.sendRedirect(request.getContextPath()+"login");
  30. //拦截
  31. return false;
  32. }
  33.  
  34. @Override
  35. public void postHandle(HttpServletRequest request, HttpServletResponse response,
  36. Object handler, ModelAndView modelAndView) throws Exception {
  37. System.out.println("LoginInterceptor "+"postHandle");
  38. }
  39.  
  40. @Override
  41. public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
  42. Object handler, Exception ex) throws Exception {
  43. System.out.println("LoginInterceptor "+"afterCompletion");
  44. }
  45. }

2、在spring-mvc.xml中配置LoginInterceptor拦截器 测试: 1、正常登录(正确密码:admin)

SpringMVC自定义拦截器登录检测功能的实现代码

1.1、点击退出登录

SpringMVC自定义拦截器登录检测功能的实现代码

2、用户名密码错误

SpringMVC自定义拦截器登录检测功能的实现代码

2.1、点击返回登录界面

SpringMVC自定义拦截器登录检测功能的实现代码

3、非法请求

SpringMVC自定义拦截器登录检测功能的实现代码

到此这篇关于SpringMVC自定义拦截器登录检测功能的实现的文章就介绍到这了,更多相关SpringMVC自定义拦截器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/codeblank/article/details/119247408