SpringBoot 拦截器

SpringBoot 拦截器

Spring MVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求并做相应的处理,通常应用与权限验证、记录请求消息的日志、判断用户是否登录等功能。

SpringMVC 中的自定义拦截器,可以通过实现 HandlerInterceptor 接口来定义。重点重写preHandle()方法。

preHandle():这个方法在业务处理器处理请求之前被调用,可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor 和 Controller 都不会执行;当返回值为true是就会继续调用下一个 Interceptor 的 preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的 Controller 方法。

定义拦截器

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //得到登录用户
        Object obj = request.getSession().getAttribute("loginUser");
        if (obj == null){//没有登录
            response.sendRedirect("/login.html?errorInfo=noland");
            //没有通过,不能继续访问目标资源
            return false;
        }
        //通过拦截器,继续访问目标资源
        return true;
    }
}

注册拦截器

拦截器定义后,必须要完成注册,才能被Spring 容器所识别。在注册时,需要指定拦截的范围

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())//注册拦截器
                .addPathPatterns("/index.html");//定义拦截范围
    }
}

文件上传

文件上传是将客户本地的文字、图片、视频等上传给 WEB 服务器。

文件上传,要求客户端必须以 POSH 方式提交,并在表单中添加 enctype=“multipart/form-data” 属性

<form action="/user/add" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="userName"><br>
头像:<input type="file" name="face" ><br>
<input type="submit" value="提交" >
</form>

在application.yml文件添加文件大小设置

server:
  port: 8088

spring:
  servlet:
    multipart:
      maxFileSize: 20MB
      maxRequestSize: 100MB
 public String add(String userName, @RequestParam("face") MultipartFile mf) throws IOException {
//        得到客户端上传文件的文件名
        String fileName = mf.getOriginalFilename();
        //将上传文件的二进制数据保存到服务器本地文件
        mf.transferTo(new File("/Users/mac/Desktop/javaWeb/interceptor
/src/main/resources/static
/userface/"+fileName));

        return "ok";
    }

在配置类中,注册上传文件路径的映射

@Configuration
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/face/**")
                .addResourceLocations("file:/Users/mac/Desktop/javaWeb/interceptor
/src/main/resources/static/userface/");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot拦截器是一种用于拦截和处理请求的组件。在SpringBoot中,我们可以通过实现`HandlerInterceptor`接口或者继承`HandlerInterceptorAdapter`类来创建自定义的拦截器拦截器可以在请求被处理之前和之后执行一些操作,比如验证用户身份、记录日志等。 在SpringBoot中,拦截器的配置可以通过实现`WebMvcConfigurer`接口来完成。我们可以在`addInterceptors`方法中添加我们自定义的拦截器,并指定拦截的路径。例如,我们可以使用`registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**")`来添加一个拦截器,并拦截所有的请求。 拦截器与过滤器的区别在于归属和内容。过滤器属于Servlet技术,而拦截器属于SpringMVC技术。过滤器对所有访问进行增强,而拦截器仅针对SpringMVC的访问进行增强。在SpringBoot中,我们可以通过配置类来添加拦截器,如`WebConfig`和`AdminWebConfig`。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Springboot——拦截器](https://blog.csdn.net/weixin_51351637/article/details/128058053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Springboot实现拦截器功能](https://blog.csdn.net/weixin_52875557/article/details/123793361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值