服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - SpringMVC自定义拦截器登录检测功能的实现代码

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

2021-08-07 23:46~祝今在 Java教程

这篇文章主要介绍了SpringMVC自定义拦截器登录检测功能的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、定义登录控制器

目录结构

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

延伸 · 阅读

精彩推荐
  • Java教程Java使用ObjectMapper的简单示例

    Java使用ObjectMapper的简单示例

    这篇文章主要介绍了Java使用ObjectMapper的简单示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    学海无涯5198962020-09-18
  • Java教程详解java倒计时三种简单实现方式

    详解java倒计时三种简单实现方式

    这篇文章主要介绍了详解java倒计时三种简单实现方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    黑仔00212132021-01-09
  • Java教程浅谈java 执行jar包中的main方法

    浅谈java 执行jar包中的main方法

    下面小编就为大家带来一篇浅谈java 执行jar包中的main方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    999abcd6952020-06-16
  • Java教程全面解析Java中的HashMap类

    全面解析Java中的HashMap类

    HashMap类为Java提供了键值对应的map类型,本文将从源码角度全面解析Java中的HashMap类,同时包括其各种常用操作方法等,欢迎参考与借鉴 ...

    pastqing1352020-05-01
  • Java教程JAVA线上常见问题排查手段汇总

    JAVA线上常见问题排查手段汇总

    这篇文章主要介绍了JAVA线上常见问题排查手段汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    云淡风轻博客3692020-08-27
  • Java教程java实现远程桌面的实例代码

    java实现远程桌面的实例代码

    下面小编就为大家分享一篇java实现远程桌面的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    一艳倾华10802021-03-22
  • Java教程Spring Boot集成Java DSL的实现代码

    Spring Boot集成Java DSL的实现代码

    这篇文章主要介绍了Spring Boot集成Java DSL的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    jdon.8762021-06-30
  • Java教程JVM 方法调用之静态分派(详解)

    JVM 方法调用之静态分派(详解)

    下面小编就为大家带来一篇JVM 方法调用之静态分派(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Java教程网5272020-09-22