拦截器和过滤器

时光飞逝,最近也是很忙,但是忙到最后发现在自己并没有太多的成长
工作
学习
生活
没想到成长是不经意间的,像是被 推着,让你身不由己
午休时间,写写博客,也是保留一些自己的时间和空间

需求

说一下近期的需求,最近在写一个项目,这个项目我想做成前后端分离的,使用的框架是springboot
我希望的是是页面也放在这个项目上,以前做了一个项目也是基于springboot的,但是并没有实现真正的前后端分离

可以看到的是这样的的一个结构 这个所有的静态文件都是放在resource/templates
但是我觉得这样并不是真正意义上的前后端分离
这其实是一种springmvc的结果,页面的显示其实还是后台通过接口返回地址映射到templates的路径


这个不是我想要的结果
下面是我想实现的结果

可以看到是我的静态文件是放在webapp文件夹下面
其实这样我的静态文件和后端接口之间是完全分离的
但是这样,我希望接口能对我有所限制,就是不是说所有的接口我都是可以调用的
有些接口需要登录之后调用
有些接口可以直接的 调用
有了上面的需求之后,,我们看看是用拦截器还是用过滤器来实现我的需求

拦截器

无论是拦截器还是过滤器。我们实现其实是继承接口
拦截器是AOP一个应用,一个编程思想
面向切面编程其实是面向对象编程思想

拦截器是对项目对项目中的一切资源都可以拦截

接口可以拦截
静态资源可以拦截
静态资源拦截,那么我们访问页面,也要走这个,他会将我们的静态资源的请求作为一个映射的地址
去在项目中进行匹配,其实这对于我们实现前后端分离是不利的
因为我们请求后台资源都要告诉他,让他去在项目中进行映射,其实我们想把静态资源和后台全独立
这样自然是不行的
那么如何实现一个拦截器

package com.could.filter;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import com.could.domain.HHUserToken;
import com.could.mapper.UserTokenMapper;@Service
public class UserTokenInterceptor implements HandlerInterceptor {@Autowiredprivate UserTokenMapper userTokenMapper;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 在请求处理之前进行调用(Controller方法调用之前),返回true才会继续往下执行,返回false取消当前请求boolean isAccess = false;String jssessionid = request.getHeader("jssessionid");if (jssessionid != null && !"".equals(jssessionid)) {// 查询未过期的HHUserToken usertoken= userTokenMapper.selectByJssessionid(jssessionid);if (usertoken != null) {isAccess = true;} else {isAccess = false;}}return isAccess;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("我执行了postHandle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("我执行了afterCompletion");}}
package com.could.filter;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;/*** * @author wdg* @category 接口拦截器,有的接口需要登录**/
@Component
@Configuration
public class UserTokenAppConfigurer extends WebMvcConfigurationSupport {private static final String[] excludePathPatterns = { "/templates/**", "/webapp/**" };private static final String[] addPathPatterns = { "/useraction/getuserinfo" };@Autowiredprivate UserTokenInterceptor userTokenInterceptor;@Autowiredprivate WebRescorceInterceptor webRescorceInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 多个拦截器组成一个拦截器链// addPathPatterns 用于添加拦截规则// excludePathPatterns 用户排除拦截registry.addWebRequestInterceptor(webRescorceInterceptor);registry.addInterceptor(userTokenInterceptor).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);super.addInterceptors(registry);}@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("**/template/**").addResourceLocations("webapp/templates/**.html");}}

这样就可以了

过滤器

package com.could.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class CustomerFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {long start = System.currentTimeMillis();chain.doFilter(request, response);System.out.println("Execute cost=" + (System.currentTimeMillis() - start));}@Overridepublic void destroy() {// TODO Auto-generated method stub}}
package com.could.filter;import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<CustomerFilter> registFilter() {FilterRegistrationBean<CustomerFilter> registration = new FilterRegistrationBean<CustomerFilter>();registration.setFilter(new CustomerFilter());registration.addUrlPatterns("/*");registration.setName("customerFilter");registration.setOrder(1);return registration;}}

希望对你有所帮助

SpringBoot 拦截器和过滤器相关推荐

  1. springboot拦截器和过滤器的区别与使用

    拦截器与过滤器的区别 spring的拦截器与servlet的filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查.日志记录等,不同的是: 适用范围不同:filter是servle ...

  2. 区分Java拦截器和过滤器

    今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...

  3. 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别

    转自:https://www.cnblogs.com/shangc/p/5939708.html 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别.其主要区别为以下几点: 1)拦截器是基于 ...

  4. struts2中拦截器和过滤器的比较

    拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...

  5. 【SpringMVC】拦截器和过滤器

    拦截器: 拦截器是springmvc中的一种,需要实现HandlerInterceptor接口. 拦截器和过滤器类似,功能方向侧重点不同. 过滤器是用来过滤器请求参数,设置编码字符集等工作. 拦截器是 ...

  6. 关于SSM框架设置拦截器和过滤器

    我们知道拦截器和过滤器都是在项目中起到拦截过滤请求的功能,所以可能在设置的时候会傻傻分不清.这里我们先来比较它们的区别. 过滤器Filter是JavaEE标准,在Servlet的规范中定义的,是Ser ...

  7. 详解拦截器和过滤器的区别

    拦截器和过滤器的区别 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对acti ...

  8. java 拦截器和过滤器的区别

    介绍 在 Java Web 应用程序中,拦截器和过滤器是两种不同的机制,用于在请求/响应处理过程中进行拦截和过滤.两者都可以用来在请求到达目标资源之前对其进行预处理.修改或拦截. 但是,拦截器和过滤器 ...

  9. 拦截器和过滤器有什么区别?

    首先了解什么是过滤器什么是拦截器 ①过滤器(Filter) 过滤器通过直接实现Filter接口实现,也可以通过@WebFilter注解实现特定的URL拦截 在Filter接口中定义了三个方法: ini ...

最新文章

  1. rhel5+nis+autofs+nfs
  2. poj3352(强连通分量)
  3. 2020事业单位转型合同制方向的政策通知
  4. Keras版Sequence2Sequence对对联实战——自然语言处理技术
  5. 解析并验证IE6及之前版本的'!important’ BUG(转)
  6. 【数据竞赛】Kaggle秘技,用Sigmoid函数做回归问题!
  7. maven项目,如何导入本地jar包
  8. python通过跳板机连接服务器_使用pycharm、跳板机连接内网服务器
  9. C++11新特性——auto和decltype
  10. python计算天数包含几周_如何在python中计算几周内两个日期之间的差异
  11. Flink standalone配置(血汗注意事项,哭唧唧)
  12. 标准差和均方根误差的区别
  13. OSX: 命令行制作U盘Recovery HD
  14. 全球及中国铁路空气弹簧行业研究及十四五规划分析报告(2022)
  15. Solaris系统配置IPMP (基于IP寻址与链路)
  16. 黑马程序员SSM-MyBatisPlus学习笔记
  17. 易飞9.0.12官方正版安装程序下载地址
  18. 2.JAVA简单实现银行账户存取钱
  19. 网页自动点击脚本(可用于自动评教)
  20. 电脑反应速度慢的原因及解决方法

热门文章

  1. 2019,归零自己,为自己重生,为自己而战
  2. Android文件系统深入剖析
  3. 内存泄漏的定位与排查:Heap Profiling 原理解析
  4. 『假如我是面试官』RabbitMQ我会这样问!
  5. 字节跳动程序员说自己因为颜值太高被男同事集体排挤!失望透顶!准备转行!...
  6. 远程调试在Linux车机中的应用
  7. 一起学习阿里巴巴数据中台实践!首次公开!
  8. 阿里某员工论坛炫耀:感谢公司让毕业不到两年的我年入百万
  9. 这可能是最为详细的Docker入门吐血总结
  10. 电商系统如何做搜索引擎?