100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Spring boot自定义拦截器和拦截器重定向配置简单介绍~!

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

时间:2021-12-20 03:18:37

相关推荐

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

大家好:

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

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

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.*;@Configurationpublic 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: /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: /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中

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。