SpringBoot拦截器(仅供自己参考)

1、完成拦截器需要实现HandlerInterceptor接口,实现其中的三个方法

package com.example.reggie.util;

import com.alibaba.fastjson.JSON;
import com.example.reggie.vo.DataView;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;

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

@Slf4j
public class ReggieInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("请求路径为{}",request.getRequestURL());
        Object employee = request.getSession().getAttribute("employee");    //获得session对象中的保存的属性

        if(employee!=null)  //不为空则说明已经登录过了,且还没有过期,直接允许访问
        {
            return true;
        }
        response.getWriter().write(JSON.toJSONString(DataView.fail(0,"NOTLOGIN",null)));    //前端js拦截处理,页面跳转
        return false;   //过期不允许访问
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

2、方法的作用:

preHandle:在请求到达处理器之前执行,可以用于权限验证、数据校验等操作。如果返回true,则继续执行后续操作;如果返回false,则中断请求处理。
postHandle:在处理器处理请求之后执行,可以用于日志记录、缓存处理等操作。
afterCompletion:在视图渲染之后执行,可以用于资源清理等操作

将拦截器加入到这个配置里面,加入到之后才能实现拦截器的作用。

package com.example.reggie.config;

import com.example.reggie.util.ReggieInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


@Configuration
@Slf4j
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        log.info("进入请稍后。。。。。。");
        registry.addInterceptor(new ReggieInterceptor())    //自定义拦截器
                .addPathPatterns("/**")     //要拦截的路径
                .excludePathPatterns("/login","/logout","/backend/**","/front/**"); //放行路径,登录,登出,静态资源都放行
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        
        //backend和front是resources目录下的两个静态资源包,将这两个静态资源包放行,如果不声明则找不到,直接404
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/"); //放行静态资源
        registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");

    }

}

(仅供本人参考,初学者)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值