博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpingMVC中的拦截器
阅读量:3965 次
发布时间:2019-05-24

本文共 4340 字,大约阅读时间需要 14 分钟。

1、概述

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

过滤器与拦截器的区别: 拦截器是AOP思想的具体应用。
过滤器
servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截
拦截器: 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用 拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的

2、自定义拦截器

那如何实现拦截器呢?

想要自定义拦截器,必须实现HandlerInterceptor 接口。
1.新建一个Moudule , 09-Interceptor , 添加web支持 与导入依赖
2. 配置web.xml 和 springmvc-servlet.xml 文件

3. 编写一个拦截器

public class MyInterceptor implements HandlerInterceptor {
//在请求处理的方法之前执行 // 如果返回true放行,执行下一个拦截器 // 如果返回false不放行,就不执行下一个拦截器 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("===========处理前==========="); return true; } //在请求处理方法执行之后执行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("===========处理后==========="); } //在dispatcherServlet处理后执行,做清理工作. @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("===========清理==========="); }}

4. 在springmvc的配置文件applicationContext.xml中配置拦截器

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

@Controllerpublic class MyController {
@RequestMapping("/test") @ResponseBody public String test1(){
return "OK"; }}

6. 前端 index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>      $Title$    拦截器测试  

7. 启动tomcat 测试一下!

在这里插入图片描述

跳转到
在这里插入图片描述
服务器里
在这里插入图片描述

8.修改拦截器

//在请求处理的方法之前执行        // 如果返回true放行,执行下一个拦截器        // 如果返回false不放行,就不执行下一个拦截器    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("===========处理前==========="); return false; }

测试:

点击后跳转页面
在这里插入图片描述
服务器
在这里插入图片描述

3、验证用户是否登录 (认证用户)

  1. 有一个登陆页面,需要写一个controller访问页面。
  2. 登陆页面有一提交表单的动作。需要在controller中处理。判断用户名密码是否正确。如果正确, 向session中写入用户信息。返回登陆成功。
  3. 拦截用户请求,判断用户是否登陆。如果用户已经登陆。放行, 如果用户未登陆,跳转到登陆页面
    在这里插入图片描述

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    登录页面
用户名:
密码:

2. 编写Controller处理请求

@Controller@RequestMapping("/user")public class LoginController {
//跳转到登录页面 @RequestMapping("/goLogin") public String goLogin(){
return "login/login"; } //登录成功到首页 @RequestMapping("/login") public String login(HttpSession session,String username){
System.out.println(username); session.setAttribute("loginUser",username); return "login/main"; } //用户登录成功后可从index直接去首页 @RequestMapping("/goMain") public String goMain(){
return "login/main"; } //注销用户 @RequestMapping("/logOut") public String logOut(HttpSession session){
//对session进行过期处理 session.invalidate(); //注销完返回首页 return "forward:/index.jsp"; }}

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    首页

用户首页

${
loginUser}
注销用户

4.编写index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>      $Title$    <%--拦截器测试--%>  登录
首页

5. 编写用户登录拦截器

public class LoginInterceptor implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//如果是登录页面要登录则可以放行 //getRequestURI() 获取请求的资源路径 //getRequestURL() 获取请求的统一资源定位符(绝对路径) if(request.getRequestURI().contains("/user/login")){
return true; } //如果已经登录了也可以放行 HttpSession session = request.getSession();// System.out.println("session==》" + session.getAttribute ("loginUser")); if(session.getAttribute ("loginUser") != null){
return true; } //用户没有登录则跳到登录页面' request.getRequestDispatcher("/WEB-INF/login/login.jsp") .forward(request,response); return false; }}

6. 在Springmvc的配置文件applicationContext.xml中注册拦截器

7.测试成功

转载地址:http://ztuki.baihongyu.com/

你可能感兴趣的文章
RapidIO协议(2)
查看>>
DM8168 EMAC/MDIO模块(2)
查看>>
DM8168 EMAC/MDIO模块(3)
查看>>
DM8168 EMAC/MDIO模块(4)
查看>>
DM8168 EMAC/MDIO模块(5)
查看>>
DM8168 EMAC/MDIO模块(6)
查看>>
DM8168 EMAC/MDIO模块(7)
查看>>
DM8168 EMAC/MDIO模块(8)
查看>>
TVP5158的多路复用技术
查看>>
DM8168 HDVPSS的VIP Parser模块(1)
查看>>
DM8168 HDVPSS的VIP Parser模块(2)
查看>>
DM8168 HDVPSS的VIP Parser模块(5)
查看>>
ADIS16400/ADIS16405带磁力计的三轴惯性传感器(1)
查看>>
ADIS16400/ADIS16405带磁力计的三轴惯性传感器(2)
查看>>
ADIS16400/ADIS16405带磁力计的三轴惯性传感器(3)
查看>>
ADIS16400/ADIS16405带磁力计的三轴惯性传感器(4)
查看>>
DM8168的系统MMU(1)
查看>>
U-Boot SD (Secured Digital card) Support
查看>>
编译uboot-TI DM8186<<TI81XX PSP U-Boot>>
查看>>
U-Boot
查看>>