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
投稿

猜你喜欢

  • Java使用openOffice对于word的转换及遇到的问题解决

    2021-12-03 00:01:16
  • java获取json中的全部键值对实例

    2023-08-23 19:53:03
  • 基于Java文件输入输出流实现文件上传下载功能

    2023-08-10 11:50:32
  • flutter material widget组件之信息展示组件使用详解

    2023-06-22 08:45:35
  • maven profile自动切换环境参数的2种方法详解

    2022-10-28 09:18:39
  • java如何使用Lombok更优雅地编码

    2022-07-24 23:24:50
  • 如何使用MybatisPlus快速进行增删改查详解

    2023-11-03 06:58:13
  • 解析JavaSE的继承和多态

    2023-11-24 16:13:48
  • Java操作Redis2种方法代码详解

    2022-09-10 22:58:56
  • mybatis plus使用redis作为二级缓存的方法

    2023-11-19 08:34:58
  • Java中JDBC连接数据库详解

    2023-08-10 16:57:18
  • Spring bean配置单例或多例模式方式

    2023-01-18 04:03:57
  • Java实现中国象棋的示例代码

    2021-08-10 21:56:03
  • SpringBoot实现接口等幂次校验的示例代码

    2022-01-21 10:49:00
  • 微信随机生成红包金额算法java版

    2023-07-27 16:01:39
  • 复杂JSON字符串转换为Java嵌套对象的实现

    2023-07-02 05:40:26
  • feignclient https 接口调用报证书错误的解决方案

    2021-08-20 18:35:55
  • SpringBoot 实现自定义的 @ConditionalOnXXX 注解示例详解

    2023-04-04 03:37:18
  • 普通对象使用spring容器中的对象的实现方法

    2023-06-17 12:27:20
  • 使用纯Java实现一个WebSSH项目的示例代码

    2023-03-11 11:32:20
  • asp之家 软件编程 m.aspxhome.com