springboot拦截器HandlerInterceptor详解

更新时间:2023-07-23 03:31:25 阅读: 评论:0

springboot拦截器HandlerInterceptor详解
Web开发中,我们除了使⽤ Filter 来过滤请web求外,还可以使⽤Spring提供的HandlerInterceptor(拦截器)。
HandlerInterceptor 的功能跟过滤器类似,但是提供更精细的的控制能⼒:在request被响应之前、request被响应之后、视图渲染之前以及request全部结束之后。我们不能通过拦截器修改request内容,但是可以通过抛出异常(或者返回fal)来暂停request的执⾏。
实现 UrRoleAuthorizationInterceptor 的拦截器有:
ConversionServiceExposingInterceptor
CorsInterceptor
LocaleChangeInterceptor
PathExposingHandlerInterceptor
ResourceUrlProviderExposingInterceptor
ThemeChangeInterceptor
UriTemplateVariablesHandlerInterceptor
UrRoleAuthorizationInterceptor
其中 LocaleChangeInterceptor 和 ThemeChangeInterceptor ⽐较常⽤。
配置拦截器也很简单,Spring 为什么提供了基础类WebMvcConfigurerAdapter ,我们只需要重写 addInterceptors ⽅法添加注册拦截器。
实现⾃定义拦截器只需要3步:
1、创建我们⾃⼰的拦截器类并实现 HandlerInterceptor 接⼝。
2、创建⼀个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors ⽅法。
2、实例化我们⾃定义的拦截器,然后将对像⼿动添加到拦截器链中(在addInterceptors⽅法中添加)。
四季养生茶
PS:本⽂重点在如何在Spring-Boot中使⽤拦截器,关于拦截器的原理请⼤家查阅资料了解。
代码⽰例:
package com.kfit.interceptor;
import javax.rvlet.http.HttpServletRequest;
import javax.rvlet.http.HttpServletRespon;
import org.springframework.web.rvlet.HandlerInterceptor;
import org.springframework.web.rvlet.ModelAndView;
/**
* ⾃定义拦截器1
*
* @author  Angel
*/
publicclass MyInterceptor1 implements HandlerInterceptor {
@Override
publicboolean preHandle(HttpServletRequest request, HttpServletRespon respon, Object handler)
throws Exception {
System.out.println(">>>MyInterceptor1>>>>>>>在请求处理之前进⾏调⽤(Controller⽅法调⽤之前)");
returntrue;// 只有返回true才会继续向下执⾏,返回fal取消当前请求
}
@Override
publicvoid postHandle(HttpServletRequest request, HttpServletRespon respon, Object handler,
马桶反臭味怎么办ModelAndView modelAndView) throws Exception {
System.out.println(">>>MyInterceptor1>>>>>>>请求处理之后进⾏调⽤,但是在视图被渲染之前(Controller⽅法调⽤之后)");
}
@Override
publicvoid afterCompletion(HttpServletRequest request, HttpServletRespon respon, Object handler, Exception ex)
throws Exception {
System.out.println(">>>MyInterceptor1>>>>>>>在整个请求结束之后被调⽤,也就是在DispatcherServlet 渲染了对应的视图之后执⾏(主要是⽤于进⾏资源清理⼯作)");    }
}
com.kfit.interceptor.MyInterceptor2.java
package com.kfit.interceptor;
import javax.rvlet.http.HttpServletRequest;
大量近义词
import javax.rvlet.http.HttpServletRespon;
import org.springframework.web.rvlet.HandlerInterceptor;
import org.springframework.web.rvlet.ModelAndView;
/**
* ⾃定义拦截器2
*
*
*/
public class MyInterceptor2 implements HandlerInterceptor {
@Override
publicboolean preHandle(HttpServletRequest request, HttpServletRespon respon, Object handler)
throws Exception {
System.out.println(">>>MyInterceptor2>>>>>>>在请求处理之前进⾏调⽤(Controller⽅法调⽤之前)");
returntrue;// 只有返回true才会继续向下执⾏,返回fal取消当前请求
}
@Override
publicvoid postHandle(HttpServletRequest request, HttpServletRespon respon, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println(">>>MyInterceptor2>>>>>>>请求处理之后进⾏调⽤,但是在视图被渲染之前(Controller⽅法调⽤之后)");
记日记的英文}
@Override
publicvoid afterCompletion(HttpServletRequest request, HttpServletRespon respon, Object handler, Exception ex)
throws Exception {团日活动总结
System.out.println(">>>MyInterceptor2>>>>>>>在整个请求结束之后被调⽤,也就是在DispatcherServlet 渲染了对应的视图之后执⾏(主要是⽤于进⾏资源清理⼯作)");    }
}
fig.MyWebAppConfigurer.java
package fig;
import com.kfit.interceptor.MyInterceptor1;
import com.kfit.interceptor.MyInterceptor2;
import t.annotation.Configuration;
import org.springframework.fig.annotation.InterceptorRegistry;
import org.springframework.fig.annotation.WebMvcConfigurerAdapter;
@Configuration
public class MyWebAppConfigurer
extends WebMvcConfigurerAdapter {
@Override
publicvoid addInterceptors(InterceptorRegistry registry) {
// 多个拦截器组成⼀个拦截器链
// addPathPatterns ⽤于添加拦截规则
// excludePathPatterns ⽤户排除拦截
我骄傲我是中国人朗诵稿原文registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**");
registry.addInterceptor(new MyInterceptor2()).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
>>>MyInterceptor1>>>>>>>在请求处理之前进⾏调⽤(Controller⽅法调⽤之前)
>>>MyInterceptor2>>>>>>>在请求处理之前进⾏调⽤(Controller⽅法调⽤之前)
>>>MyInterceptor2>>>>>>>请求处理之后进⾏调⽤,但是在视图被渲染之前(Controller⽅法调⽤之后)
>>>MyInterceptor1>>>>>>>请求处理之后进⾏调⽤,但是在视图被渲染之前(Controller⽅法调⽤之后)
>>>MyInterceptor2>>>>>>>在整个请求结束之后被调⽤,也就是在DispatcherServlet 渲染了对应的
视图之后执⾏(主要是⽤于进⾏资源清理⼯作)
>>>MyInterceptor1>>>>>>>在整个请求结束之后被调⽤,也就是在DispatcherServlet 渲染了对应的视图之后执⾏(主要是⽤于进⾏资源清理⼯作)
---------------------
HandlerInterceptor拦截登陆的实现
@Component
public class MyHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletRespon respon, Object handler) throws Exception {
String name= (String) Session().getAttribute("LoginName");
if (!name.isEmpty()){
return fal;
}el {
return true;
}
}
}
实现拦截⽅法从⽽判断使否含有Session值该⽅法在请求之前执⾏
@Controller
public class HelloController {垃圾分类素材
@RequestMapping("login")
public String login(@RequestParam("urname") String urname, @RequestParam("password") String password, HttpSession ssion){ if (urname.equals("123")&password.equals("123")){
ssion.tAttribute("LoginName",urname);
return "redirect:main";
}el{
return "login";
}
}
---------------------
作者:⼩灬罗
来源:CSDN
原⽂:blog.csdn/luojingwei1997/article/details/80554672
性别平等版权声明:本⽂为博主原创⽂章,转载请附上博⽂链接!

本文发布于:2023-07-23 03:31:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1092823.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:拦截器   请求   渲染   提供   定义
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图