springboot配置拦截器

本文介绍了如何在SpringBoot中配置拦截器,主要目的是实现请求的权限验证。通过自定义拦截器,针对特定请求如findController/getFindData和findController/getFindSeek进行排除,其余请求将被拦截。在拦截器内部,利用Token_JWT.verifyToken().get("code")检查用户登录状态,返回600表示已登录,400表示未登录。当用户未登录时,会通过request.setAttribute向前台传递错误代码400,提供了一个链接以便了解如何从前台获取传入的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置拦截器只需要两个类

import cn.asxuexi.tool.URLInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * Title:
 *
 * @author: chenmingyue
 * @date: 2018/3/16 12:01
 * Description:配置URLInterceptor拦截器,以及拦截路径
 */
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // addPathPatterns 用于添加拦截规则
        // excludePathPatterns 用户排除拦截
        registry.addInterceptor(new URLInterceptor()).addPathPatterns("/*/*")
                .excludePathPatterns("/findController/getFindData").excludePathPatterns("/findController/getFindSeek");//初始页和搜索不拦截
        super.addInterceptors(registry);
    }
}

findController/getFindData和findController/getFindSeek这两个请求不被拦截,根据自己的需求来,可以不写,这样所有的请求都会被拦截

/**
 * 拦截器拦截请求
 */

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

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

//重写方法中内容根据具体项目来
public class URLInterceptor implements HandlerInterceptor {
    //前拦截
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        boolean mark;
        int code = (int) Token_JWT.verifyToken().get("code");
        if (code == 600) {
            mark = true;
        } else {
            request.setAttribute("find", 400);
            mark = false;
        }
        return mark;
    }
    //post拦截
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {
//        if (modelAndView != null){
//            if(! (modelAndView.getView() instanceof RedirectView)){
//                String basePath = request.getContextPath();
//                //modelAndView.addObject("basePath",basePath);
//                request.setAttribute("basePath",basePath);
//            }
//        }
    }

    //结束之后拦截
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

上面的代码中这部分是根据自己的需求来判断的

  boolean mark;
        int code = (int) Token_JWT.verifyToken().get("code");
        if (code == 600) {
            mark = true;
        } else {
            request.setAttribute("find", 400);
            mark = false;
        }

Token_JWT.verifyToken().get(“code”);是自己写的,用返回值来判断当前用户是否登录,600是登录,400是没有登录,
request.setAttribute(“find”, 400); 这个的意思是给前台传数据,具体用法可以看看这个网址:
后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
返回值为true时则可以继续向下执行,返回值为false时则不向下执行,并向前台传(“find”, 400),相当于HasMap中的k,v。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值