SpringMVC之拦截器和异常处理器

微笑向暖 2021-01-25 ⋅ 7 阅读

在SpringMVC中,拦截器(Interceptor)和异常处理器(ExceptionHandler)是两个常用的组件,它们可以帮助我们更好地控制和处理请求和异常。本文将介绍SpringMVC中拦截器和异常处理器的使用方式,并实现一些实用的功能。

1. 拦截器

拦截器是在请求到达Controller之前或之后进行预处理或后处理的组件。常见的应用场景包括登录验证、权限校验和日志记录等。在SpringMVC中使用拦截器非常简单,只需实现HandlerInterceptor接口并配置到Spring容器中即可。

1.1 定义拦截器

@Component
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求到达Controller之前执行的逻辑
        return true; // 继续处理请求
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在调用Controller之后,渲染视图前执行的逻辑
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在视图渲染完成后执行的逻辑
    }
}

1.2 配置拦截器

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }
}

1.3 拦截器使用示例

实现一个登录验证的拦截器,在用户请求到达Controller之前检查用户是否已登录。

@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 获取用户登录信息
        User user = (User) request.getSession().getAttribute("user");
        // 如果用户未登录,重定向到登录页面
        if (user == null) {
            response.sendRedirect("/login");
            return false;
        }
        // 用户已登录,继续处理请求
        return true;
    }
}

2. 异常处理器

异常处理器是在发生异常时进行处理的组件,它可以自定义异常的处理逻辑,返回特定的错误信息给客户端。在SpringMVC中,可以使用@ControllerAdvice注解来定义全局的异常处理器。

2.1 定义异常处理器

@ControllerAdvice
public class MyExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Response handleException(Exception e) {
        // 自定义异常处理逻辑
        return new Response(false, e.getMessage());
    }
}

2.2 自定义异常

public class MyException extends RuntimeException {

    public MyException(String message) {
        super(message);
    }
}

2.3 异常处理器使用示例

在Controller中抛出自定义异常,并由异常处理器进行处理。

@Controller
public class MyController {

    @GetMapping("/hello")
    public String sayHello() {
        throw new MyException("发生了错误");
    }
}

3. 结语

拦截器和异常处理器是SpringMVC中非常有用的组件,它们可以帮助我们实现各种功能,例如登录验证、权限控制和异常处理。通过本文的介绍,相信你已经对如何使用和配置拦截器和异常处理器有了一定的了解。在实际的项目中,根据具体需求,你可以更灵活地使用和扩展它们。


全部评论: 0

    我有话说: