大家好:

  本文简单介绍一下用于权限控制的Spring boot拦截器配置,拦截器重定向问题。

开发工具:jdk1.8   idea2017(付费版,网上找的破解教程)

1,首先使用idea创建一个Spring boot+jsp的简单项目,结构目录如下:

2.创建filter文件夹,在文件夹创建CheckFilter.java文件,继承拦截器基础接口HandlerInterceptor,并实现以下三个方法:

preHandle:核心方法,请求处理器,只有该方法返回true,才会继续执行后续的Controller。
postHandle:DispatcherServlet进行视图返回渲染之前进行调用
afterCompletion:在DispatcherServlet 渲染了对应的视图之后执行。用于进行资源清理

3,在filter文件中创建 WebMvcConfig.java文件,继承类 WebMvcConfigurationSupport(拦截器的配置类,主要配置拦截器的相关参数),并继承以下方法:

addInterceptors:添加拦截器实例
addResourceHandlers:静态文件访问配置
configureViewResolvers:视图配置

4,最终代码展示

拦截器

package com.example.filter;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class CheckFilter implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("拦截器访问方法:"+request.getServletPath());return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}

拦截器配置类

因为WebMvcConfigurationSupport不走自动化的配置文件,所以一些静态文件,视图配置需要自己手动再添加一下

package com.example.filter;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {@Overrideprotected void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new CheckFilter()).addPathPatterns("/**").excludePathPatterns("/testBean/test");super.addInterceptors(registry);}@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");super.addResourceHandlers(registry);}@Overrideprotected void configureViewResolvers(ViewResolverRegistry registry) {registry.jsp("/WEB-INF/",".jsp");super.configureViewResolvers(registry);}
}

addInterceptors(InterceptorRegistry registry):添加拦截器,并且配置拦截路径等参数
  addInterceptor(new CheckFilter()):添加实例化的拦截器
  addPathPatterns("/**") :配置拦截器拦截的路径
  excludePathPatterns("/testBean/test"):配置不进去拦截器的方法,多少个就可以像这样儿在后面一直添加,excludePathPatterns("/testBean/test","","",........).
ddResourceHandlers(ResourceHandlerRegistry registry):静态文件访问配置
onfigureViewResolvers(ViewResolverRegistry registry):试图配置测试的bean

package com.example.demo;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("testBean")
public class TestBean {@RequestMapping("testDemo")public String TestDemo(){return "hello";}@RequestMapping("test")public String test(){return "test";}
}

配置文件

 application.properties

两个简单jsp

<%--Created by IntelliJ IDEA.User: genDate: 2018/7/25Time: 17:34To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>Hello,World!
</body>
</html>

<%--Created by IntelliJ IDEA.User: genDate: 2018/8/23Time: 16:33To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>拦截器访问!
</body>
</html>

4,开始测试代码

打开浏览器访问TestBean.java的第一方法

http://localhost:8080/springBoot_demo/testBean/testDemo

出现访问拦截器的文字,测试成功

打开浏览器访问TestBean.java的第二方法,这个方法配置不走拦截器

http://localhost:8080/springBoot_demo/testBean/test

如果进入拦截器应该会再多出现一行文字,没有出现第二行字代表着测试成功,没有进入拦截器

5.拦截器的重定向配置

关于这个重定向问题,在spring mvc中可以在拦截器中直接重定向到jsp中,例如这样儿:response.sendRedirect(request.getContextPath()+"/mainFunction/errorMsg.jsp");

但是spring boot这样写会报错,我在网上找了好多关于拦截器重定向文章,没有发现直接访问jsp的写法,都是一个方案,直接重定向到bean的方法,然后返回到你想要页面.

简单修改代码:

在CheckFilter.java的preHandle方法中添加两行:
HttpSession seesion = request.getSession();
response.sendRedirect(request.getContextPath()+"/testBean/test");
在请求已经响应后创建seesion会后台报错,所以需要添加获取session,在请求结束前创建session
这个方案需要将/testBean/test配置为不进入拦截器,要不然就会是一个无限重定向的死循环。
因为上面我已经将/testBean/test加入到不进去拦截器的配置中,所以WebMvcConfig.java就不需要再改了
修改后代码:

 CheckFilter.java

6.重启项目,测试重定向是否生效

打开浏览器继续访问TestBean.java的第一方法

http://localhost:8080/springBoot_demo/testBean/testDemo

测试成功,正常进去test.jsp中

Spring boot自定义拦截器和拦截器重定向配置简单介绍~!相关推荐

  1. 【229期】Spring Boot 使用令牌桶算法+拦截器+自定义注解+自定义异常实现简单的限流...

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...

  2. Spring Boot实战:过滤器、拦截器与切片

    Spring Boot实战:过滤器.拦截器与切片 Q:使用过滤器.拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系 过滤器Filter 过滤器概念 Filter是J2E中来的,可以看做是Se ...

  3. Spring Boot(5) web开发(3)拦截器、文件上传、异常处理

    Spring Boot(5) web开发(3)拦截器.文件上传.异常处理 学习视频: https://www.bilibili.com/video/BV19K4y1L7MT?p=49&spm_ ...

  4. Spring MVC拦截器(Interceptor)的配置及使用

    在开发一个网站时可能有这样的需求:某些页面只希望几个特定的用户浏览.对于这样的访问权限控制,应该如何实现呢?拦截器就可以实现上述需求.在Struts 2 框架中,拦截器是其重要的组成部分,Spring ...

  5. Struts2 自定义拦截器(方法拦截器)

    转自:http://05061107cm.iteye.com/blog/365504 struts2系统自带了很多拦截器,有时需要我们自己定义,一般有两种方式: 一.实现Interceptor接口 J ...

  6. SpringBoot2整合Mybatis拦截器,拦截mapper接口的某个方法

    需求: 在执行某个动态sql时,where 子句,希望通过用户进行自定义查询条件,比如用户可以传入 "id > 100011 and name = '张三'" 的多条件表达式 ...

  7. springmvc拦截器无法拦截jsp

    为什么80%的码农都做不了架构师?>>>    问题:spring mvc的拦截器只拦截controller不拦截jsp文件,如果不拦截jsp文件也会给系统带安全性问题. 解决方案: ...

  8. Struts2 拦截器: 拦截器与过滤器区别

    1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加 ...

  9. mybatis使用拦截器显示sql,使用druid配置连接信息

    mybatis使用拦截器显示sql,使用druid配置连接信息 mybatis sql Druid 1.显示出sql内容: 新建2个类: MybatisInterceptor :拦截sql,并获得输出 ...

最新文章

  1. 问价已损坏 文件服务器,由于检查点文件 (.chk) 丢失或已损坏,无法打开数据库...
  2. ZooKeeper快速搭建
  3. OBYC中的GBB一般修改的解释
  4. python向sqlite数据库中插入数据(变量)
  5. 《模式识别导论》特性选择与特征提取概要
  6. Jmeter中JDBC链接配置 JDBC Connection Configuration
  7. 集中式整合之编写springsecurity配置类
  8. C++Primer学习笔记:第8章 IO库
  9. java 面试 —— java 基础
  10. HDU 1861 游船出租(模拟)
  11. [转]Fedora Core Linux 9 中安装VMware Tools-6.5.0
  12. 《程序员代码面试指南》第五章 字符串问题 字符串匹配问题
  13. 环境影响评价期末考试题库
  14. java 后端,Java后端岗位职责描述
  15. 简述银行会计科目的分类
  16. 多彩m618plus评测_将来的你 ,一定会感谢现在换鼠标的自己--多彩M618Plus垂直鼠标...
  17. app每月签到功能简单实现
  18. CSDN 去除图片水印
  19. 如何以软文宣传的方式成功推广洗发水的新产品上市?
  20. windows平台下的oracle ORA-01031的解决方法

热门文章

  1. 华为P9遭疯抢,首发3分钟售罄;苹果汽车概念图遭权威杂志曝光引热议;中科大机器人太逼真
  2. 2008-2020上市公司全要素生产率OP方法-文献-数据-Stata代码
  3. shell基础正则表达式
  4. 软件测试思想者 - “中华公网共图强”观后感
  5. eclipse (氧气版)oxygen下载
  6. 计算机图像处理领域重要期刊汇总
  7. WEB前端开发工程师面试题
  8. minotaur的故事_Minotaur为Mesos,Kafka和Hadoop开发开源云
  9. 2021年度国家科技奖进入申报期,这几个问题需要重点关注!
  10. Unity 输出360图片