springBoot整合拦截器

1、引入依赖(该实例引入thymeleaf技术,方便返回页面的时候映射templates文件夹下面的文件)

        <!--  想要映射templates文件夹下面的文件必须需要入thymeleaf技术 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

2、编写拦截器方法(实现HandlerInterceptor接口,并实现其中的三个方法)

package com.ltj.demo.Interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Interceptor1 implements HandlerInterceptor {

    /**
     *  在拦截器执行之前执行
     *
     * @param request
     * @param response
     * @param handler
     * @return      只有该实现方法有返回值,该返回值为false这不执行拦截下面的所有代码
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        System.out.println("i am preHandle");

        return true;
//        return false;         //设置为false则将该拦截器一下的代码均不执行,直接返回页面
    }

    /**
     * 在拦截器执行完成后才执行
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {

        System.out.println("i am afterCompletion");

    }


    /**
     * 在执行器拦截之后才执行
     * modelAndView该参数可以改变返回的页面参数等的信息
     *
     * @param request
     * @param response
     * @param handler
     * @param mav
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav)
            throws Exception {

        System.out.println("i am posthandle");

        /**
         * 在该拦截器中使用该ModelAndView接口,拦截的类必须实现该ModelAndView的接口并返回到页面
         *
         * 该拦截器设置的ViewName优先级高于拦截类的ViewName
         *
         */
        mav.setViewName("/interceptorPage1.html");
    }
}

3、注册拦截器,添加拦截路径

package com.ltj.demo.Configuration;

import com.ltj.demo.Interceptor.Interceptor1;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 添加拦截器,并添加@Configuration注解
 *
 * WebMvcConfigurerAdapter接口已经设置为过期(Deprecated),不建议使用
 * 可以实现其父接口WebMvcConfigurer
 */
@Configuration
public class interceptorConfigration implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //添加拦截器,addPathPatterns为添加拦截的方法
        registry.addInterceptor(new Interceptor1())
                .addPathPatterns("/test/Interceptor/testByAdmin");
//                .addPathPatterns("");          //可以继续添加多个拦截路径

    }


}

4、创建静态页面放入到resources\templates路径下

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>

<div>
    <form method="post" action="/test/Interceptor/testByAdmin">
        账号:<input style="" name="userName" type="text"/><br/>
        密码:<input name="passWord" type="password"/><br/><br/>
        <input type="submit"/>
    </form>
</div>

</body>
</html>

interceptorPage.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>拦截器页面</title>
</head>
<body>

    <b>我是拦截页面</b>
    <a href="index.html" target="_self"/>
</body>
</html>


interceptorPage1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>拦截器页面1</title>
</head>
<body>

    <b>我是拦截页面1</b>
    <a href="index.html" target="_self"/>
</body>
</html>

5、添加测试Controller

package com.ltj.demo.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/test/Interceptor")
public class InterceptorController {

    @RequestMapping("/testInterceptor")
    public String testInterceptor(){
        return "index.html";
    }


    /**
     * 该类实现了拦截器的功能,postHandle该方法实现了ModelAndView类,
     * 该拦截的方法就必须要有返回ModelAndView对象,否则报错
     *
     * @param req
     * @param resp
     * @param mav
     * @return
     */
    @RequestMapping("/testByAdmin")
    public ModelAndView testByAdmin(HttpServletRequest req, HttpServletResponse resp, ModelAndView mav){

        //获取前端传输过来的值
        String userName = req.getParameter("userName");
        String passWord = req.getParameter("passWord");

        System.out.println(userName + "-----" + passWord);

        //拦截器的ModelAndView优先级高于该方法内的ModelAndView
        mav.setViewName("/interceptorPage.html");

        return mav;
    }

}

 

 

测试地址:http://localhost:8080/test/Interceptor/testInterceptor

前端页面输入值:
账号:123456
密码:123456

后台输出值:

页面跳转

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值