《Spring MVC》 第八章 拦截器实现权限验证、异常处理

简介: 《Spring MVC》 第八章 拦截器实现权限验证、异常处理

前言

Spring 提供了Interceptor 拦截器,可用于实现权限验证、异常处理等

1、拦截器

对用户请求进行拦截,并在请求进入控制器(Controller)之前、控制器处理完请求后、甚至是渲染视图后,执行一些指定的操作

1.1、定义拦截器

/**
 * 拦截器
 */
public class MvcInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}
方法名 返回值 说明
preHandle () boolean 该方法在控制器方法之前执行,其返回值用来表示是否中断后续操作。返回值为 true 时,表示继续向下执行;返回值为 false 时,表示中断后续的操作。
postHandle () void 该方法会在控制器方法调用之后,解析视图之前执行。我们可以通过此方法对请求域中的模型(Model)数据和视图做出进一步的修改。
afterCompletion () void 该方法会在整个请求完成后,即视图渲染结束之后执行。我们可以通过该方法实现资源清理、日志记录等工作。

1.2、配置拦截器

<!-- 配置拦截器-->
 <mvc:interceptors>
     <mvc:interceptor>
         <!--拦截的路径/dskfsd/sdfsdf/sdfsdf/asdfa-->
         <mvc:mapping path="/**"/>
         <!--不需要拦截的路径-->
         <mvc:exclude-mapping path="/login"/>
         <mvc:exclude-mapping path="/"/>
         <bean class="com.hqyj.springmvc.interceptor.MvcInterceptor"/>
     </mvc:interceptor>
 </mvc:interceptors>

1.3、拦截器执行流程

2、异常处理

Spring MVC 提供了一个名为 HandlerExceptionResolver 的异常处理器接口,常用的实现类如下:

  • DefaultHandlerExceptionResolver
  • ResponseStatusExceptionResolver
  • ExceptionHandlerExceptionResolver
  • SimpleMappingExceptionResolver

ExceptionHandlerExceptionResolver、ResponseStatusExceptionResolver 和 DefaultHandlerExceptionResolver 是 Spring MVC 的默认异常处理器。Spring MVC 会按照 ExceptionHandlerExceptionResolver → ResponseStatusExceptionResolver → DefaultHandlerExceptionResolver 的顺序,依次使用这三个异常处理器对异常进行解析

2.1、ExceptionHandlerExceptionResolver源码

异常状态码表示:

异常 状态码 说明
HttpRequestMethodNotSupportedException 405(Method Not Allowed) HTTP 请求方式不支持异常
HttpMediaTypeNotSupportedException 415(Unsupported Media Type) HTTP 媒体类型不支持异常
HttpMediaTypeNotAcceptableException 406(Not Acceptable) HTTP 媒体类型不可接受异常
BindException 400(Bad Request) 数据绑定异常
MissingServletRequestParameterException 400(Bad Request) 缺少参数异常
ConversionNotSupportedException 500(Internal Server Error) 数据类型转换异常
TypeMismatchException 400(Bad Request) 类型不匹配异常
HttpMessageNotReadableException 400(Bad Request) HTTP 消息不可读异常
HttpMessageNotWritableException 500(Internal Server Error) HTTP 消息不可写异常

2.2、ResponseStatusExceptionResolver

用来解析 @ResponseStatus 注解标注的自定义异常,并把异常的状态信息返回给客户端展示。

package com.hqyj.springmvc.exception;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(code= HttpStatus.BAD_REQUEST,reason = "hello自定义异常")
public class HelloException extends RuntimeException{
}

定义controller方法,然后抛出以上的异常。

2.3、ExceptionHandlerExceptionResolver

ExceptionHandlerExceptionResolver 可以在控制器方法出现异常时,调用相应的 @ExceptionHandler 方法对异常进行处理。

@ExceptionHandler(Exception.class)
public String handleException(Exception e){
    e.printStackTrace();
    return "exception";
}

定义多个exception处理类优先顺序问题

2.4、全局异常处理

/**
 * 全局异常处理类
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler
    public String exceptionAdvice(Exception e){
        e.printStackTrace();
        return "";
    }
}


目录
相关文章
|
1月前
|
缓存 前端开发 Java
Spring MVC 面试题及答案整理,最新面试题
Spring MVC 面试题及答案整理,最新面试题
90 0
|
1月前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
10 0
|
1月前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
9 0
|
1月前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
26 0
|
1月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
42 1
|
2天前
|
前端开发 Java Spring
[AIGC] Spring Interceptor 拦截器详解
[AIGC] Spring Interceptor 拦截器详解
|
14天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
23 3
|
14天前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
14 1
|
14天前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
30 3
|
24天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南