spring boot的 * 简单使用示例代码

作者:牛头人 时间:2021-09-29 04:07:07 

1.spring boot * 默认有:

HandlerInterceptorAdapter
AbstractHandlerMapping
UserRoleAuthorizationInterceptor
LocaleChangeInterceptor
ThemeChangeInterceptor 

其中 LocaleChangeInterceptor 和 ThemeChangeInterceptor 比较常用。

2.实现自定义 * 只需要3步:

1)、创建我们自己的 * 类并实现 HandlerInterceptor 接口。

2)、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。

3)、实例化我们自定义的 * ,然后将对像手动添加到 * 链中(在addInterceptors方法中添加)。

3.代码示例

IndexInterceptor.java类代码:


package com.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class IndexInterceptor implements HandlerInterceptor{
 @Override
 public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
     throws Exception {
   System.out.println(">>>IndexInterceptor>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
 }
 @Override
 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
     throws Exception {
   System.out.println(">>>IndexInterceptor>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
 }
 @Override
 public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
    System.out.println(">>>IndexInterceptor>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
    // 只有返回true才会继续向下执行,返回false取消当前请求
    return true;
 }
}

IndexInterceptor2.java类代码:


package com.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class IndexInterceptor2 implements HandlerInterceptor{
 @Override
 public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
     throws Exception {
   System.out.println(">>>IndexInterceptor2>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
 }
 @Override
 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
     throws Exception {
   System.out.println(">>>IndexInterceptor2>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
 }
 @Override
 public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
    System.out.println(">>>IndexInterceptor2>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
    // 只有返回true才会继续向下执行,返回false取消当前请求
    return false;
 }
}

SimpleWebAppConfigurer.java类代码:


package com.example.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.example.interceptor.IndexInterceptor;
import com.example.interceptor.IndexInterceptor2;
//只要能被springboot扫描到即可
@Configuration
public class SimpleWebAppConfigurer extends WebMvcConfigurerAdapter{
 @Override
 public void addInterceptors(InterceptorRegistry registry) {
   // 多个 * 组成一个 * 链
   // addPathPatterns 用于添加拦截规则
   // excludePathPatterns 用户排除拦截
   registry.addInterceptor(new IndexInterceptor()).addPathPatterns("/**");
   registry.addInterceptor(new IndexInterceptor2()).addPathPatterns("/**");
   super.addInterceptors(registry);
 }
}

4. * 解析说明

preHandle**:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们上一章的Controller实现);

返回值:true表示继续流程(如调用下一个 * 或处理器);

false表示流程中断(如登录检查失败),不会继续调用其他的 * 或处理器,此时我们需要通过response来产生响应;

postHandle**:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。

afterCompletion**:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的 * 的afterCompletion**。

以上所述是小编给大家介绍的spring boot的 * 简单使用浅析网站的支持!

来源:http://www.cnblogs.com/web424/p/6755968.html

标签:spring,boot, ,
0
投稿

猜你喜欢

  • Android实现自动变换大小的ViewPager

    2023-03-19 06:56:15
  • 简单讲解java中throws与throw的区别

    2022-06-01 05:16:55
  • 基于C语言的库封装发布技术详解

    2023-10-14 05:58:46
  • Spring Cloud Zuul添加过滤器过程解析

    2023-02-01 06:37:25
  • SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法

    2022-07-18 03:38:36
  • Android 判断SIM卡属于哪个移动运营商详解及实例

    2023-08-25 15:29:39
  • Java实现发送手机短信语音验证功能代码实例

    2023-04-04 19:03:31
  • Android Data Binding 在 library module 中遇到错误及解决办法

    2021-08-31 12:16:31
  • 教你轻松制作java视频播放器

    2023-06-25 06:34:05
  • 使用java实现telnet-client工具分享

    2023-10-18 10:56:59
  • C#实现求一组数据众数的方法

    2023-06-07 00:11:53
  • C++右值引用与move和forward函数的使用详解

    2023-07-05 19:27:33
  • jmeter中json提取器如何提取多个参数值

    2022-08-10 00:08:27
  • Android进阶CoordinatorLayout协调者布局实现吸顶效果

    2022-11-04 21:45:48
  • SpringBoot集成支付宝沙箱支付的实现示例

    2023-10-31 19:22:20
  • C#基础知识之new关键字介绍

    2021-09-24 02:48:26
  • java线程同步操作实例详解

    2023-11-13 14:19:08
  • java设计模式之工厂方法模式

    2022-08-29 05:14:10
  • Spring Security权限想要细化到按钮实现示例

    2022-10-14 20:52:38
  • Java中实现获取路径的方法汇总

    2022-12-19 08:10:54
  • asp之家 软件编程 m.aspxhome.com