介绍
这篇文章给大家介绍怎么在春天中利用滤过滤器对全局异常处理进行配置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
春天下滤过滤器配置全局异常处理
- <李>
过滤器中出现的异常,春天的全局异常处理器是无法捕获的,所以过滤拦截器中出现的异常会直接的抛向浏览器,在浏览器中显示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