动态资源和静态资源

  拦截器可以算是aop的一种实现,专门拦截对动态资源的后台请求,也就是拦截对控制层的请求,主要用于判断用户是否有权限请求后台。拦截器不会拦截静态资源,如spring boot默认静态目录resources/static。请求期目录下的html,js,img都不会被拦截。将一些静态资源分离出来放在静态服务器也可以缓解后台服务器的压力。

创建拦截器

package com.david.controller;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyInterceptor implements HandlerInterceptor {
/**
* controller执行前调用此方法
* 返回true表示继续执行,返回false终止执行 这里可以加入登陆校验、权限拦截等
*/
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
return false;
} /**
* controller执行后但未返回视图前调用此方法
* 这里可在返回用户前对模型数据进行加工处理 比如可以加入共用信息以便页面显示
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } /**
* controller执行后且试图返回后调用此方法
* 这里可得到执行controller时的异常信息 也可以记录日志
*/
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { }
}

只需要实现HandlerInterceptor接口即可,通常在preHandle中判断是否有权限 返回false终止请求(一般重定向到登陆页) 返回true放行

配置拦截器

//回顾下mvc中如何配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/product/*"/>
<bean class="com.david.utils.myInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

在spring boot中只需要继承WebMvcConfigurerAdapter说明这是一个spring mvc配置类,重写addInterceptors方法就可以实现拦截的配置。

@SpringBootConfiguration
public class mvc extends WebMvcConfigurerAdapter {
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns:添加拦截规则 excludePathPatterns: 排除拦截规则
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/error");
}
}

/**表示所有的请求url,包括子路径,/error是spring boot中默认处理异常的url,将其排除掉,不拦截它

使用拦截器还是过滤器

  先有的servlet,然后才是spring mvc。同理,首先会执行过滤器,然后才是拦截器。过滤器属于servlet技术,所以可以过滤servlet和spring mvc请求。而拦截器属于spring,所以只能拦截spring mvc,无法拦截servlet,如果项目用的十spring,拦截器可以和spring更好的融合,可以自动识别spring boot静态资源。如果项目没有用spring而是servlet,那肯定只能用过滤器了。

Spring Boot (20) 拦截器的更多相关文章

  1. Spring Boot配置拦截器及实现跨域访问

    拦截器功能强大,能够深入方法前后,常应用于日志记录.权限检查和性能检测等,几乎是项目中不可或缺的一部分,本文就来实现Spring Boot自定义拦截器的配置. 理论指导 问:Spring Boot怎么 ...

  2. spring boot 使用拦截器,注解 实现 权限过滤

    http://www.cnblogs.com/zhangXingSheng/p/7744997.html spring boot 使用拦截器 实现 用户登录拦截 http://www.cnblogs. ...

  3. Spring Boot整合拦截器

    过滤器和监听器都属于Servlet 的api,还可以使用 Spring 提供的拦截器(HandlerInterceptor)进行改更精细的控制.

  4. spring boot 添加拦截器

    构建一个spring boot项目. 添加拦截器需要添加一个configuration @Configuration @ComponentScan(basePackageClasses = Appli ...

  5. spring boot 添加拦截器的简单实例(springBoot 2.x版本,添加拦截器,静态资源不可访问解决方法)

    spring中拦截器主要分两种,一个是HandlerInterceptor,一个是MethodInterceptor 一.HandlerInterceptor HandlerInterceptor是s ...

  6. 【第四十章】Spring Boot 自定义拦截器

    1.首先编写拦截器代码 package com.sarnath.interceptor; import javax.servlet.http.HttpServletRequest; import ja ...

  7. spring boot的拦截器简单使用

    1.spring boot拦截器默认有: HandlerInterceptorAdapter AbstractHandlerMapping UserRoleAuthorizationIntercept ...

  8. Spring Boot之拦截器与过滤器(完整版)

    作者:liuxiaopeng 链接:http://www.cnblogs.com/paddix 作者:蓝精灵lx原文:https://blog.csdn.net/liuxiao723846/artic ...

  9. Spring boot自定义拦截器和拦截器重定向配置简单介绍

    大家好: 本文简单介绍一下用于权限控制的Spring boot拦截器配置,拦截器重定向问题. 开发工具:jdk1.8   idea2017(付费版,网上找的破解教程) 1,首先使用idea创建一个Sp ...

随机推荐

  1. 控制台输出(System.out.printf)的使用

    一.  介绍 System.out.printf 与 C语言中的 printf 使用方法类似,可以向控制台(Console) 输出指定格式的内容.使用  System.out.printf 的方法比使 ...

  2. php第二十一节课

    AJAX <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  3. uva 524(Prime Ring Problem UVA - 524 )

    dfs练习题,我素数打表的时候j=i了,一直没发现实际上是j=i*i,以后可记住了.还有最后一行不能有空格...昏迷了半天 我的代码(紫书上的算法) #include <bits/stdc++. ...

  4. 亚马逊免费服务器搭建Discuz!论坛过程(四)

    上述命令还可能因缺少包引发其他错误: 如果出错则安装对应的包即可. 以下供参考: yum install libxml2 yum install libxml2-devel -y yum instal ...

  5. 第2章 Python序列

    Python序列类似于C或Basic中的一维.多维数组等,但功能要强大很多,使用也更加灵活.方便,Head First Python一书就戏称列表是“打了激素”的数组. Python中常用的序列结构有 ...

  6. SCI 论文金句

    SCI 不会写?其实英语基础好一点,文献多看一点,多写写自然就能自己写出来了.当然,你肯定会说英语真的好难,好吧,就知道你们懒得学英语了.我给你们整理了一套万能模板,涵盖了论文不同部分的常用句型. 摘 ...

  7. bupt summer training for 16 #5 ——数据结构

    https://vjudge.net/contest/173780 A.假设 Pt = i,则由Ppi = i得 Ppt = t = Pi 所以就有 if Pt = i then Pi = t #in ...

  8. Office 2003的卸载 与 Office 2013 的安装

    一.Office 2003的卸载 软件:卸载Office2003.msi 运行该软件,等待几分钟即可, 二.Office 2013 的安装 1.Office Professional Plus 201 ...

  9. P1294 高手去散步 洛谷

    https://www.luogu.org/problem/show?pid=1294#sub 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天 ...

  10. F2BPM 开发Api与RESTfull应用服务Api 层次关系及示例

    目前越来越多的企业架构解决方案更加趋向于基于http协议“微服务”访问跨系统调用,而不使用统传的WebService调用,即通过RESTfull方式进行交互,更加轻量整合调用更加方便.本文档中所有F2 ...