文章目录

  • 1.拦截器
    • 1.1 概述
    • 1.2 自定义拦截器
  • 2. 验证用户是否登录 (认证用户)
    • 2.1 实现思路
    • 2.2 实现

1.拦截器

1.1 概述

SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。

过滤器与拦截器的区别:拦截器是AOP思想的具体应用。

过滤器

  • servlet规范中的一部分,任何java web工程都可以使用

  • 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截

拦截器

  • 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用

  • 拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的

1.2 自定义拦截器

想要自定义拦截器,必须实现 HandlerInterceptor 接口。

1、新建一个Moudule , springmvc-07-Interceptor , 添加web支持

2、配置web.xml 和 springmvc-servlet.xml 文件

3、编写一个拦截器

package com.zh.config;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyInterceptor implements HandlerInterceptor {//在请求处理方法前执行//return false;不执行下一个拦截器//return true;执行下一个拦截器public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("---------------处理前------------------");return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("---------------处理后------------------");}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("---------------清理------------------");}
}

4、在springmvc的配置文件中配置拦截器

   <!--配置拦截器--><mvc:interceptors><mvc:interceptor><!--/** 包括路径及其子路径--><!--/admin/* 拦截的是/admin/add等等这种 , /admin/add/user不会被拦截--><!--/admin/** 拦截的是/admin/下的所有--><mvc:mapping path="/**"/><!--bean配置的就是拦截器--><bean class="com.zh.config.MyInterceptor"/></mvc:interceptor></mvc:interceptors>

5、编写一个Controller,接收请求

@RestController
public class HelloController {@GetMapping("hello")public String test(){System.out.println("控制器中的方法执行了");return "hello";}
}

6.测试

2. 验证用户是否登录 (认证用户)

2.1 实现思路

1、有一个登陆页面,需要写一个controller访问页面。

2、登陆页面有一提交表单的动作。需要在controller中处理。判断用户名密码是否正确。如果正确,向session中写入用户信息。返回登陆成功。

3、拦截用户请求,判断用户是否登陆。如果用户已经登陆。放行, 如果用户未登陆,跳转到登陆页面

2.2 实现

1、编写一个登陆页面 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/login" >用户名  <input type="text" name="username"> <br>密码 <input type="password" name="password"> <br><input type="submit" value="提交"></form></body>
</html>

2、编写一个Controller处理请求

package com.zh.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;@Controller
@RequestMapping("/user")
public class UserController {//跳转到登录页面@RequestMapping("/jumpLogin")public String jumpLogin(){return "login";}//跳转到成功页面@RequestMapping("/jumpSuccess")public String jumpSuccess(){return "success";}@RequestMapping("/login")public String login(HttpSession session,String username,String password){//向session记录用户登录信息session.setAttribute("user",username);return "success";}@RequestMapping("/logout")public String logout(HttpSession session){session.removeAttribute("user");return "login";}
}

3、编写一个登陆成功的页面 success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录成功页面</title>
</head>
<body>
${user}
<a href="${pageContext.request.contextPath}/user/logout">注销</a>
</body>
</html>

4、在 index 页面上测试跳转!启动Tomcat 测试,未登录也可以进入主页!

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body><h1>首页</h1><hr>
<%--登录--%><a href="${pageContext.request.contextPath}/user/jumplogin">登录</a><a href="${pageContext.request.contextPath}/user/jumpSuccess">成功页面</a></body>
</html>

5、编写用户登录拦截器

package com.zh.config;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class LoginInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 如果是登陆页面则放行if (request.getRequestURI().contains("login")){return true;}HttpSession session = request.getSession();// 如果用户已登陆也放行if (session.getAttribute("user")!=null){return true;}// 用户没有登陆跳转到登陆页面request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);return false;}
}

6、在Springmvc的配置文件中注册拦截器

 <mvc:interceptor><mvc:mapping path="/**"/><bean id="loginInterceptor" class="com.zh.config.LoginInterceptor"/></mvc:interceptor>

7、再次重启Tomcat测试!

(SpringMVC)拦截器相关推荐

  1. springMVC 拦截器

    为什么80%的码农都做不了架构师?>>>    实现springMVC 拦截器步骤: 1.定义拦截器类××××HandlerInterceptor  继承HandlerInterce ...

  2. springmvc 拦截器、国际化、验证

    2019独角兽企业重金招聘Python工程师标准>>> springmvc 拦截器 继承了HandlerIntercepter的类可以作为拦截器类: package com.yawn ...

  3. Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7098753.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十六)--S ...

  4. SpringMVC拦截器与异常处理

    SpringMVC拦截器与异常处理 参考文章: (1)SpringMVC拦截器与异常处理 (2)https://www.cnblogs.com/luckgood/p/9724057.html 备忘一下 ...

  5. SpringMVC拦截器2(资源和权限管理)(作为补充说明)

    SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...

  6. SpringMVC拦截器HandlerInterceptor原理及使用

    在使用SpringMVC拦截器的时候,我们接触的最多的便是HandlerInterceptor接口,因为我们所有的自定义拦截器都必须要实现HandlerInterceptor接口,那么就先从Handl ...

  7. Java Servlet 过滤器与 springmvc 拦截器的区别?

    前言:在工作中,遇到需要记录日志的情况,不知道该选择过滤器还是拦截器,故总结了一下. servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取.过滤器的工作方式分为四种 应用场景 ...

  8. 在拦截器里放入参数 controller_干货|SpringMVC拦截器的使用详解

    一.拦截器简介 Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信 ...

  9. 跨域请求/SpringMVC拦截器

    <!-- 开启允许跨域 --> <mvc:cors> <mvc:mapping path="/**"/> </mvc:cors> S ...

  10. SpringMVC拦截器Interceptor

    SpringMVC拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似与servlet中的Filter. SpringMVC 中的Interceptor 拦截请求是通过Ha ...

最新文章

  1. Windows Server2012R2 FTP服务器配置
  2. 用JScript.net写.net应用程序
  3. vncviewer 连接到服务器授权失败的解决方法/一些常用命令
  4. 研究所月入两万,是一种什么体验?
  5. 用计算机打出二分之一,win10手机计算器怎么输入二分之一?
  6. axios的get请求 - 代码篇
  7. Java8新特性总结 -8.Nashorn , JavaScript引擎
  8. 【EMC】电压暂降、短时中断和电压变化
  9. jupyter notebook安装相关问题
  10. WAP调用微信支付https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1
  11. hadoop-uber作业模式
  12. 物联网核心技术射频识别技术,传感技术,网络通信技术、嵌入式系统技术和云计算的基本介绍
  13. 快车解密php,PHP迅雷、快车、旋风下载专用链转换代码
  14. 在线生成网站地图工具SiteMap
  15. 云计算之路-阿里云上:一夜之间竞价服务器全没了
  16. word或excel图片没有另存为怎么办
  17. 【文件系统】uploader实战详解实现分片上传、秒传、续传等(1)
  18. 道达天际首次亮相军博会,“天网融合”引爆全场
  19. Duilib创建添加自定义控件
  20. 品牌客户收入同比增长超470%,快手或成品牌营销新蓝海

热门文章

  1. IPFS (2) 系统技术架构
  2. C++ Primer 5th笔记(chap 14 重载运算和类型转换)标准库函数对象
  3. 攻防世界Reverse第十二题maze
  4. MATLAB算法(函数)编译为C++动态库遇到的问题
  5. 【Flask项目2】定制统一的JSON返回格式(6)
  6. Secure Partitions in optee
  7. 全局变量/static静态变量在section段中的分布
  8. [mmu/cache]-ARMV8 MMU内存管理中的Memory attributes和Cache policies
  9. ICS大作业——程序人生 Hello‘s P2P
  10. Docker核心原理之cgroups