大家好:

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

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

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

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

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

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

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

4,最终代码展示

拦截器

  1. package com.example.filter;
  2.  
  3. import org.springframework.web.servlet.HandlerInterceptor;
  4. import org.springframework.web.servlet.ModelAndView;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. public class CheckFilter implements HandlerInterceptor {
  10.  
  11. @Override
  12. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  13.  
  14. System.out.println("拦截器访问方法:"+request.getServletPath());
  15.  
  16. return true;
  17. }
  18.  
  19. @Override
  20. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  21.  
  22. }
  23.  
  24. @Override
  25. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  26.  
  27. }
  28. }

CheckFilter.java

拦截器配置类

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

  1. package com.example.filter;
  2.  
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.*;
  5.  
  6. @Configuration
  7. public class WebMvcConfig extends WebMvcConfigurationSupport {
  8.  
  9. @Override
  10. protected void addInterceptors(InterceptorRegistry registry) {
  11. registry.addInterceptor(new CheckFilter()).addPathPatterns("/**").
  12. excludePathPatterns("/testBean/test");
  13. super.addInterceptors(registry);
  14. }
  15.  
  16. @Override
  17. protected void addResourceHandlers(ResourceHandlerRegistry registry) {
  18. registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
  19. super.addResourceHandlers(registry);
  20. }
  21.  
  22. @Override
  23. protected void configureViewResolvers(ViewResolverRegistry registry) {
  24. registry.jsp("/WEB-INF/",".jsp");
  25. super.configureViewResolvers(registry);
  26. }
  27. }

WebMvcConfig.java

  1. addInterceptors(InterceptorRegistry registry):添加拦截器,并且配置拦截路径等参数
  1.   addInterceptor(new CheckFilter()):添加实例化的拦截器
  1.   addPathPatterns("/**") :配置拦截器拦截的路径
  1.   excludePathPatterns("/testBean/test"):配置不进去拦截器的方法,多少个就可以像这样儿在后面一直添加,excludePathPatterns("/testBean/test","","",........).
  1. ddResourceHandlers(ResourceHandlerRegistry registry):静态文件访问配置
  1. onfigureViewResolvers(ViewResolverRegistry registry):试图配置
  2.  
  3. 测试的bean
  1. package com.example.demo;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5.  
  6. @Controller
  7. @RequestMapping("testBean")
  8. public class TestBean {
  9.  
  10. @RequestMapping("testDemo")
  11. public String TestDemo(){
  12.  
  13. return "hello";
  14. }
  15.  
  16. @RequestMapping("test")
  17. public String test(){
  18. return "test";
  19. }
  20. }

TestBean.java

配置文件

  1. #访问相关配置
  2. server.port=8080
  3. server.tomcat.uri-encoding=UTF-8
  4. #项目访问名称,如果不配置直接访问bean就可以
  5. server.servlet.context-path=/springBoot_demo
  6.  
  7. #数据库配置
  8. spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
  9. spring.datasource.url=jdbc:oracle:thin:@localhost:1521:ORCL
  10. spring.datasource.username=silver
  11. spring.datasource.password=silver
  12.  
  13. #Spring boot视图配置
  14. spring.mvc.view.prefix=/WEB-INF/
  15. spring.mvc.view.suffix=.jsp
  16. #静态文件访问配置
  17. spring.mvc.static-path-pattern=/static/**

application.properties

两个简单jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: gen
  4. Date: 2018/7/25
  5. Time: 17:34
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>Title</title>
  12. </head>
  13. <body>
  14. Hello,World!
  15. </body>
  16. </html>

hello.jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: gen
  4. Date: 2018/8/23
  5. Time: 16:33
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>Title</title>
  12. </head>
  13. <body>
  14. 拦截器访问!
  15. </body>
  16. </html>

test.jsp

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的方法,然后返回到你想要页面.

简单修改代码:

  1. CheckFilter.javapreHandle方法中添加两行:
    HttpSession seesion = request.getSession();
    response.sendRedirect(request.getContextPath()+"/testBean/test");
    在请求已经响应后创建seesion会后台报错,所以需要添加获取session,在请求结束前创建session
  1. 这个方案需要将/testBean/test配置为不进入拦截器,要不然就会是一个无限重定向的死循环。
    因为上面我已经将/testBean/test加入到不进去拦截器的配置中,所以WebMvcConfig.java就不需要再改了
  1. 修改后代码:
  1. package com.example.filter;
  2.  
  3. import org.springframework.web.servlet.HandlerInterceptor;
  4. import org.springframework.web.servlet.ModelAndView;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. public class CheckFilter implements HandlerInterceptor {
  10.  
  11. @Override
  12. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  13.  
  14. System.out.println("拦截器访问方法:"+request.getServletPath());
  15. response.sendRedirect(request.getContextPath()+"/testBean/test");
  16. return true;
  17. }
  18.  
  19. @Override
  20. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  21.  
  22. }
  23.  
  24. @Override
  25. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  26.  
  27. }
  28. }

CheckFilter.java

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

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

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

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

Spring boot自定义拦截器和拦截器重定向配置简单介绍的更多相关文章

  1. Spring Boot干货:静态资源和拦截器处理

    前言 本章我们来介绍下SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfigurerAdapter. 正文 前面章节我们也有简单介绍过SpringBoot中对静态资源的默认支持 ...

  2. Spring Boot项目中如何定制拦截器

    本文首发于个人网站:Spring Boot项目中如何定制拦截器 Servlet 过滤器属于Servlet API,和Spring关系不大.除了使用过滤器包装web请求,Spring MVC还提供Han ...

  3. spring拦截器不拦截方法名原因

    开发一个基于注解的登录拦截器,遇到拦截器只能拦截controller不能拦截到具体的方法名,这样拦截器就完全没用,经过仔细摸索,DefaultAnnotationHandlerMapping和Anno ...

  4. Spring Boot 2.X(四):Spring Boot 自定义 Web MVC 配置

    0.准备 Spring Boot 不仅提供了相当简单使用的自动配置功能,而且开放了非常自由灵活的配置类.Spring MVC 为我们提供了 WebMvcConfigurationSupport 类和一 ...

  5. SpringBoot系列(十一)拦截器与拦截器链的配置与使用详解,你知道多少?

    往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静 ...

  6. struts2拦截器interceptor的三种配置方法

    1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...

  7. Struts2-整理笔记(五)拦截器、拦截器配置

    拦截器(Interceptor) 拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 拦截器的优点 简化了Action的实现 ...

  8. SpringMCVC拦截器不拦截静态资源

    SpringMCVC拦截器不拦截静态资源 SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下 ...

  9. Spring Boot自定义Redis缓存配置,保存value格式JSON字符串

    Spring Boot自定义Redis缓存,保存格式JSON字符串 部分内容转自 https://blog.csdn.net/caojidasabi/article/details/83059642 ...

随机推荐

  1. pipeline语法之environment,dir(),deleteDir()方法,readJSON,writeJSON

    一 environment指令指定一系列键值对,这些对值将被定义为所有步骤的环境变量或阶段特定步骤 environment{…}, 大括号里面写一些键值对,也就是定义一些变量并赋值,这些变量就是环境变 ...

  2. The user specified as a definer ('root'@'%') does not exist解决

    转自:https://www.cnblogs.com/hanxue53/p/5850263.html 解决方法: 2.进入mysql的安装路径之前,要确保你的mysql服务是开启的: 在DOS命令窗口 ...

  3. 使用Ueditor点击上传图片时显示延迟的问题

    最近在做一个项目,需要用到Ueditor,但是在点击上传图片的时候,总是隔了4-5秒才显示文件框 查了一些资料,最后发现,只需在 修改:(1) dialog/images/image.js 把imag ...

  4. shell正则匹配IP地址

    IP分成5大类: A类地址 ⑴ 第1字节为网络地址,其它3个字节为主机地址. ⑵ 范围:1.0.0.1—126.155.255.254 ⑶ 私有地址和保留地址: ① 10.X.X.X是私有地址(只能在 ...

  5. Java中如何修改Jar中的内容

    一.摘要 好长时间没写blog了,之前换了一家公司.表示工作更有战斗力了,可惜就是没时间写文章了.在这段时间其实是遇到很多问题的,只是都是记录下来,并没有花时间去研究解决.但是这周遇到这个问题没办法让 ...

  6. Network基础(二):数制转换

    一.数制转换 目标: 1)请将下列数字转换为十进制数: (110010011111)2 .(10110101110)2 2)请将下列十进制数转换为二进制: 156.2608.1043 方案: 使用按权 ...

  7. element-ul 处理 组件内的弹出框close问题

    <el-dialog custom-class="rental-pop" :close-on-click-modal="false" :append-to ...

  8. php自带函数大全

    php自带函数大全 http://blog.csdn.net/hopewtc/article/details/6797326   Abs: 取得绝对值.Acos: 取得反余弦值.ada_afetch: ...

  9. 优化问题及KKT条件

    整理自其他优秀博文及自己理解. 目录 无约束优化 等式约束 不等式约束(KKT条件) 1.无约束优化 无约束优化问题即高数下册中的 “多元函数的极值"  部分. 驻点:所有偏导数皆为0的点: ...

  10. 81、Tensorflow实现LeNet-5模型,多层卷积层,识别mnist数据集

    ''' Created on 2017年4月22日 @author: weizhen ''' import os import tensorflow as tf import numpy as np ...