springboot整合拦截器

这里说第一种方法
创建类然后实现HandlerInterceptor
先上代码

package cn.com.doone.sc.tx.cloud.dyb.system.handle;

import cn.com.doone.sc.tx.cloud.dyb.system.bean.po.member.MemberPo;
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;
import javax.servlet.http.HttpSession;

/**

  • @Auther: liufei

  • @Date: 2020/7/1 09:28

  • @Description:
    */
    @Component
    public class AuthInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    throws Exception {
    System.out.println(“开始拦截…”);
    String requestURI = request.getRequestURI();
    if(requestURI.startsWith("/static")||requestURI.startsWith("/error")){
    return true;
    }
    HttpSession session = request.getSession(true);
    MemberPo memberPo = (MemberPo)session.getAttribute("");
    if(memberPo!=null){
    UserContext.setUser(memberPo);
    }
    //业务代码
    return true;
    }

    /**

    • 后处理回调方法,实现处理器(controller)的后处理,但在渲染视图之前
    • 此时我们可以通过modelAndView对模型数据进行处理或对视图进行处理
      */
      @Override
      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
      ModelAndView modelAndView) throws Exception {
      // TODO Auto-generated method stub

    }
    /**

    • 整个请求处理完毕回调方法,即在视图渲染完毕时回调,
    • 如性能监控中我们可以在此记录结束时间并输出消耗时间,
    • 还可以进行一些资源清理,类似于try-catch-finally中的finally,
    • 但仅调用处理器执行链中
      */
      @Override
      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
      throws Exception {
      // TODO Auto-generated method stub
      UserContext.remove();
      }
      }

然后讲解
在这里插入图片描述

然后创建一个类
将刚刚的拦截器注入
package cn.com.doone.sc.tx.cloud.dyb.system.handle;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

/**

  • @Auther: liufei

  • @Date: 2020/7/1 09:54

  • @Description:
    */
    @Configuration
    public class MvcInterceptorConfig extends WebMvcConfigurationSupport {

    @Autowired
    private AuthInterceptor authInterceptor;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
    // 多个拦截器组成一个拦截器链
    // addPathPatterns 用于添加拦截规则,/表示拦截所有请求
    // excludePathPatterns 用户排除拦截
    registry.addInterceptor(authInterceptor).addPathPatterns("/
    ")
    .excludePathPatterns("/stuInfo/getAllStuInfoA","/account/register");
    super.addInterceptors(registry);
    }

}

这里讲解下上面
在这里插入图片描述


如果我们这边要弄多个拦截器
比如说我这里在加一个拦截器
package cn.com.doone.sc.tx.cloud.dyb.system.handle;

import cn.com.doone.sc.tx.cloud.dyb.system.bean.po.member.MemberPo;
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;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

/**

  • @Auther: liufei

  • @Date: 2020/7/1 10:55

  • @Description:
    */
    @Component
    public class AuthActionInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    throws Exception {
    System.out.println(“开始拦截1…1”);
    MemberPo memberPo = UserContext.getUser();
    if(memberPo==null){
    String mString = URLEncoder.encode(“请先登录”, “utf-8”);
    /* String target = URLEncoder.encode(request.getRequestURL().toString(), “uft-8”);*/
    returnJson(response,"{“code”:400,“msg”:“请登录!”}");
    return false;
    }else{
    return true;
    }
    }

    /**

    • 后处理回调方法,实现处理器(controller)的后处理,但在渲染视图之前
    • 此时我们可以通过modelAndView对模型数据进行处理或对视图进行处理
      */
      @Override
      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
      ModelAndView modelAndView) throws Exception {
      // TODO Auto-generated method stub

    }
    /**

    • 整个请求处理完毕回调方法,即在视图渲染完毕时回调,
    • 如性能监控中我们可以在此记录结束时间并输出消耗时间,
    • 还可以进行一些资源清理,类似于try-catch-finally中的finally,
    • 但仅调用处理器执行链中
      */
      @Override
      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
      throws Exception {
      // TODO Auto-generated method stub
      }

    /返回客户端数据/
    private void returnJson(HttpServletResponse response, String json) throws Exception{
    PrintWriter writer = null;
    response.setCharacterEncoding(“UTF-8”);
    response.setContentType(“text/html; charset=utf-8”);
    try {
    writer = response.getWriter();
    writer.print(json);

     } catch (IOException e) {
     } finally {
         if (writer != null){
             writer.close();}
     }
    

    }

}

我这里需要第一个拦截器在第二个拦截器之前拦截

这里就需要这样设置
package cn.com.doone.sc.tx.cloud.dyb.system.handle;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

/**

  • @Auther: liufei

  • @Date: 2020/7/1 09:54

  • @Description:
    */
    @Configuration
    public class MvcInterceptorConfig extends WebMvcConfigurationSupport {

    @Autowired
    private AuthInterceptor authInterceptor;
    @Autowired
    private AuthActionInterceptor authActionInterceptor;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
    // 多个拦截器组成一个拦截器链
    // addPathPatterns 用于添加拦截规则,/表示拦截所有请求
    // excludePathPatterns 用户排除拦截
    registry.addInterceptor(authInterceptor).addPathPatterns("/
    ")
    .excludePathPatterns("/stuInfo/getAllStuInfoA","/account/register");
    registry.addInterceptor(authActionInterceptor).addPathPatterns("/**")
    .excludePathPatterns("/stuInfo/getAllStuInfoA","/account/register");
    super.addInterceptors(registry);
    }

}

这里稍微讲解下
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值