Java拦截器的简单使用

本文介绍了Spring MVC中的拦截器机制,用于在Action执行前后插入自定义代码,例如日志记录、权限检查等。通过实现HandlerInterceptor接口并配置拦截路径,展示了如何创建一个简单的拦截器,该拦截器在请求处理后打印请求参数,包括URL、查询参数、Cookie和Authorization头信息,方便调试和理解请求流程。
摘要由CSDN通过智能技术生成

一、简介

概念: java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。

作用域: 动态拦截Action调用的对象。

简单来说,我们可以通过配置拦截器,来进行一些操作,比如:提前拦截掉不合规范的请求、在下发请求时提前做一些重复的事情等等。

使用方式: 实现方法有两种 实现Interceptor接口或继承HandlerInterceptorAdapter类,实现接口需要实现其中的方法,而继承抽象类则一般实现preHandle方法即可。



二、实现

这里采用实现HandlerInterceptor的方法。

首先配置拦截器

@Configuration
class InterceptorConfig implements WebMvcConfigurer {
    //需要拦截的地址,使用正则来规范
    final String[] InterceptPaths = {"/**"};


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new InterceptorControl()).addPathPatterns(InterceptPaths);
    }
}

实现拦截器
这里仅实现打印请求的功能进行测试

class InterceptorControl implements HandlerInterceptor {

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        //打印请求参数的拦截器,方便调试时使用
        //cookie
        String Cookie = request.getHeader("Cookie");
        //Authorization
        String Authorization = request.getHeader("Authorization");
        //请求地址
        StringBuffer requestURL = request.getRequestURL();
        //获取请求参数
        String params = request.getQueryString();

        System.out.println("\r\n==================================================================================\r\n");
        System.out.println("URL : " + requestURL + "\r\n");
        System.out.println("params : " + params + "\r\n");
        System.out.println("Cookie : " + Cookie + "\r\n");
        System.out.println("Authorization : " + Authorization + "\r\n");
        System.out.println("==================================================================================\r\n");
    }
}

拦截器类 需要两个配合使用这里只有一个 @Configuration public class ServletContextConfig extends WebMvcConfigurerAdapter { public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/"); super.addResourceHandlers(registry); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new HandlerMyInterceptorAdapter()).addPathPatterns("/**") .excludePathPatterns("/") // .excludePathPatterns("/expressions/getExpressionsList") .excludePathPatterns("/loginInfo/getCordByIsPhone") .excludePathPatterns("/loginInfo/login11") //token失效跳轉 .excludePathPatterns("/loginInfo/insertLoginInfo") //注册 .excludePathPatterns("/loginInfo/login") //登录 .excludePathPatterns("/upload") //上传文件 .excludePathPatterns("/uploadListen") //上传文件 .excludePathPatterns("/admin/user/goLogin") //后台跳转登录 .excludePathPatterns("/admin/user/login") //后台登录 .excludePathPatterns("/loginInfo/getLoginInfo") //忘记密码 .excludePathPatterns("/loginInfo/getCord") //短信验证码 .excludePathPatterns("/loginInfo/getIsLoginInfo") //判断验证码&&登录 .excludePathPatterns("/loginInfo/getIsLoginInfo1") //判断验证码 .excludePathPatterns("/loginInfo/setPassWord") //设置密码 ; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } } @Component public class HandlerMyInterceptorAdapter implements HandlerInterceptor { @Autowired private HeartbeatServiceImpl heartbeatService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { String url = request.getRequestURI(); if (url.contains("admin")) { User user = (User) request.getSession().getAttribute("user"); try { if (user.equals(null)) { response.sendRedirect(serverConfig.SERVER + "admin/user/goLogin"); return false; } else { return true; } }catch (Exception e){ response.sendRedirect(serverConfig.SERVER + "admin/user/goLogin"); return false; } }else { String token = request.getHeader("token"); if (token != null) { Jedis jedis = new Jedis(com.sevenSteps.util.RedisConfig.HOST, RedisConfig.PORT); String s = jedis.get(token); if(token.equals(s)) { heartbeatService = SpringUtil.getBean(HeartbeatServiceImpl.class); return heartbeatService.setOutDate(token); }else { response.sendRedirect(serverConfig.SERVER + "loginInfo/login11"); return true; } }else { response.sendRedirect(serverConfig.SERVER + "loginInfo/login11"); return true; } } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值