SpringBoot整合web开发注册拦截器

创建springboot项目,添加spring-boot-starter-web依赖。

拦截器

在这里,拦截器是在controller代码执行之前执行的程序,它主要是用于拦截用户请求并作相应的处理,比如说可以判断用户是否登录,进行校验之类的工作。

大致流程

SpringBoot中的拦截器实现和spring mvc 中是一样的,它的大致流程是先自己创建一个拦截器类,让它实现HandlerInterceptor接口。然后定义配置类进行拦截器的配置,实现WebMvcConfigurer接口,实现接口中的addInterceptors方法。

自定义拦截器

package com.example.frame.interceptor;

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

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


@Component
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("进入拦截器了");
        //中间写逻辑代码,比如判断是否登录成功,失败则返回false
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("controller执行完了");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("获取到的返回结果" + response);
        System.out.println("请求结束了");
    }
}

注意说明:

  1. 重写的三个方法,在实际实现上,也可以只实现一个最重要的preHandle方法
    2.preHandle()
    此方法进入controller层之前拦截请求
    返回值:表示是否将当前的请求拦截下来
    false:拦截请求,请求将终止。true:请求不被拦截,继续执行
    3.postHandle()
    此方法将在controller执行之后执行,但是视图还没有解析,即处理请求完成后视图渲染之前的处理操作,可通过ModelAndView参数改变显示的视图,或发往视图的方法,或添加数据
    4.afterCompletion()
    此方法会在整个请求结束(请求结束,但是并未返回结果给客户端)之后执行, 可获取响应数据及异常信息。

配置拦截器

package com.example.frame.interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/LoginController/login");
    }
}

注意说明:

1.重写addInterceptors方法,addInterceptor方法是将拦截器注入到适配器中。
2.addPathPatterns方法是设置一个需要拦截的路径,可以是多个字符串或者是直接传入一个数组。
/** 拦截所有的路径
3.excludePathPatterns是配置不需要拦截的路径。
4.需要加上configuration注解说明这是一个配置类,在项目启动的时候自动执行。

controller测试

创建一个登陆测试,这个接口不会被拦截。

package com.example.frame.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/LoginController")
public class UserLoginController {

    @RequestMapping("/login")
    public String login(){
        System.out.println("controller开始执行");
        return "login success";
    }
}

创建一个拦截的controller

package com.example.frame.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        System.out.println("经过拦截的controller代码执行完毕");
        return "hello";
    }
}

测试

在这里插入图片描述
在这里插入图片描述
拦截器中的方法将按preHandle->Controller->postHandle->afterCompletion的顺序执行。注意,只有preHandle方法返回true时后边的方法才会执行,返回false的话,就在拦截器的preHandle方法中了

SpringBoot整合Mybatis完整详细版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值