SpringMVC-05

发布时间:2024年01月11日

Spring MVC拦截器是在请求到达处理器前或返回客户端前执行的组件,它可以用于拦截和处理请求,实现一些通用的功能。
Spring MVC拦截器可以实现的功能包括:

  1. 登录验证:拦截所有请求,检查用户是否已登录,未登录则跳转到登录页面。
  2. 权限验证:拦截请求,检查用户是否拥有访问权限,没有权限则跳转到错误页面。
  3. 日志记录:记录请求的参数、处理时间等信息,用于分析和排查问题。
  4. 数据预处理:对请求参数进行一些预处理,比如格式化日期、转换数据类型等。
  5. 异常处理:拦截处理过程中出现的异常,进行统一的异常处理。

要使用Spring MVC拦截器,需要实现HandlerInterceptor接口,并注册到Spring的上下文中。拦截器可以通过配置匹配的URL路径、排除的URL路径等条件来决定对哪些请求进行拦截。

拦截器的执行顺序由配置的顺序决定,可以通过实现Ordered接口来指定拦截器的顺序。在拦截器的preHandle方法中,可以根据需要进行请求的拦截或处理;在postHandle方法中可以对处理结果做一些处理;在afterCompletion方法中可以进行一些清理工作。

拦截器是Spring MVC框架提供的一种灵活、可扩展的机制,可以在请求处理的各个阶段进行拦截和处理。它可以帮助我们实现一些通用的功能,代码重用性高,提高了开发效率。

拦截器 SpringMVC
过滤器 javaWeb

拦截器使用:1.创建拦截器类
2.添加拦截器
多个拦截器,先声明的优先级高

public class MyInterceptor implements HandlerInterceptor {
    //执行handler之前   调用的拦截方法 如登录保护 权限处理等
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("request:"+request+" response:"+response+" handler"+handler);
        return true;
    }

    //执行handler之后   触发的方法   如铭感词汇检查等
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor.postHandle");
    }

    //整体处理完毕后   触发的方法
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor.afterCompletion");
    }
}



    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //拦截全部请求
        registry.addInterceptor(new MyInterceptor());
    }


        //方案2.指定地址拦截
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/user/data");		// 模糊地址:/user/*	    
                                                                                        //*代表任意一层     **代表任意多层

在Spring MVC中,我们可以使用JSR 303(Bean Validation)注解来进行参数校验。JSR 303定义了一组标准的注解,可以用于对Java Bean的属性进行验证。
常用的JSR 303注解包括:
@NotNull:表示属性不能为null。
@NotEmpty:表示字符串不能为空,集合不能为空。
@NotBlank:表示字符串不能为空,且长度必须大于0。
@Size:表示属性的大小必须在指定的范围内。
@Min:表示属性的最小值。
@Max:表示属性的最大值。
@Pattern:表示属性必须匹配指定的正则表达式。
@Email:表示属性必须是一个有效的电子邮件地址。

导入依赖

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>8.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator-annotation-processor</artifactId>
            <version>8.0.0.Final</version>
        </dependency>

步骤:1.在实体类中添加注解

public class User1 {
    @NotBlank
    private String name;        //不为空
    @Length(min=6)
    private String password;    //长度大于6位
    @Min(1)
    private int age;            //>=1
    @Email
    private String email;       //邮箱格式
    @Past
    private Date birthday;      //过去时间
}

2.handler(@Validated 实体类 实体类对象)

@RestController
@RequestMapping("user1")
public class UserController1 {
    @PostMapping("register")
    public Object register(@Validated @RequestBody User1 user1, BindingResult result){
        //BindingResult 获取错误,绑定错误,不会直接返回
        if(result.hasErrors()){
            Map data=new HashMap();
            data.put("code",400);
            data.put("msg","参数错误");
            return data;
        }
        return user1;
    }
}
文章来源:https://blog.csdn.net/qq_53568730/article/details/135521333
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。