怎么在春天中利用滤过滤器对全局异常处理进行配置

  介绍

这篇文章给大家介绍怎么在春天中利用滤过滤器对全局异常处理进行配置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

春天下滤过滤器配置全局异常处理

<李>

过滤器中出现的异常,春天的全局异常处理器是无法捕获的,所以过滤拦截器中出现的异常会直接的抛向浏览器,在浏览器中显示500错误。

<李>

而我当前的项目中,是在过滤器中判断用户是否有携带令牌访问,如果没有,则抛出异常,让其做登录操作,而且异常信息要处理成json格式返回给前端。这就很尴尬了。

好了废话说多了,上解决方案:

结局方案:

过滤器拦截器中直接抛出异常信息

@ component   public  class  AdminAuthentiationFilter  extends  OncePerRequestFilter  {      private 才能final  String  DEFAULTE_URI =,“/api/admin/login";   @Override才能   protected 才能;void  doFilterInternal (HttpServletRequest 点播,HttpServletResponse 职责,,FilterChain  filterChain), throws  ServletException, IOException  {      ,,,String  admin_token =, req.getHeader (“admin_token");      ,,,如果(StrUtil.isBlank (admin_token),,,, ! req.getRequestURI () .equals (DEFAULTE_URI)) {   ,,,,,//在拦截器中直接抛出一个异常   ,,,,,throw  new  LoginException(“用户未登录,请先登录!“);   ,,,}   ,,,filterChain.doFilter(要求、职责);   ,,}   }

第一步:在网络。xml中配置错误页,用于捕获500年状态

& lt; !——,注册过滤器——比;   & lt; filter>   & lt;才能filter-name> myFilter</filter-name>   & lt;才能filter-class> com.fenkuan.support.filters.AdminAuthentiationFilter</filter-class>   & lt;/filter>   & lt; filter-mapping>   & lt;才能filter-name> myFilter</filter-name>   & lt;才能url-pattern>/* & lt;/url-pattern>   & lt;/filter-mapping>   & lt; !——捕获500错误状态——比;   & lt; error-page>   & lt;才能error-code> 500 & lt;/error-code>   & lt;才能location>/500 & lt;/location>   & lt;/error-page>

第二步:编写一个FilterException自定义异常类

public  class  FilterException  extends  RuntimeException {   private  String 数据;   public 才能FilterException (String 消息),{   ,,,超级(消息);   ,,}      public 才能;FilterException (String 消息,String 数据),{   ,,,超级(消息,数据);   ,,,this.data =,数据;   ,,}   ,,public  String  getData (), {   ,,,return 数据;   ,,}   }

第三步:编写一个用于处理500错误的控制器

@RestController   public  class  FilterErrorController  {      @RequestMapping才能(“/500“)   public 才能;void  filterError (HttpServletRequest 点播){   ,,,//获取servlet请求中的异常属性。该属性下存储了确切的错误信息。   ,,,Throwable  t =, (Throwable), req.getAttribute (“javax.servlet.error.exception");//创建一个filterException抛出,该异常会被全局异常处理类捕获,并处理。   ,,,throw  new  FilterException (t.getMessage ());   ,,}   }

第四步:编写一个捕获全局异常的异常处理类

//全局异常处理类   @RestControllerAdvice   public  class  ControllerExceptionHandler {      @ExceptionHandler才能(FilterException.class)   @ResponseStatus才能(HttpStatus.BAD_REQUEST)   public 才能;BadException< ?祝辞,filterException (FilterException  e) {   ,,,BadException, objectBadException =, handleExceptionObject (e);   ,,,objectBadException.setStatus (HttpStatus.BAD_REQUEST.value ());   ,,,objectBadException.setMessage (e.getMessage ());   ,,,return  objectBadException;   ,,}   ,,   @ExceptionHandler才能(Exception.class)   @ResponseStatus才能(HttpStatus.INTERNAL_SERVER_ERROR)   public 才能;BadException< ?祝辞,responseException (Exception  e) {   ,,,,//异常兜底处理   ,,,BadException<?祝辞,objectBadException =, handleExceptionObject (e);   ,,,objectBadException.setStatus (HttpStatus.INTERNAL_SERVER_ERROR.value ());   ,,,objectBadException.setMessage (HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase ());   ,,,return  objectBadException;   ,,}   是//,,Throwable异常的父类,所以可以使用该类型来接受项目中抛出的所有异常,包括异常即其子类。   private 才能;& lt; T>, BadException

怎么在春天中利用滤过滤器对全局异常处理进行配置

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5