Java 捕获filter抛出的异常 自定义返回码

web项目中过滤器抛出的异常不直接被全局异常处理捕获,不过我们可以选择其他办法达到目录
实例代码

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
String reqUrl = request.getRequestURI();
log.info("当前请求:{}",reqUrl);
if (StringUtils.equals(reqUrl, LOGIN_URL)) {
filterChain.doFilter(servletRequest, servletResponse);
return;
}
String authzHeader = getAuthzHeader(servletRequest);
if(StringUtils.isBlank(authzHeader)){
NeedLoginException exception = new NeedLoginException("请先登录!");
request.setAttribute(CommonConsts.NEED_LOGIN_ERROR,exception);
throw exception;
}
boolean verify = JwtUtil.verify(authzHeader);
if(!verify){
NeedLoginException exception = new NeedLoginException("无效token,请先登录!");
request.setAttribute(CommonConsts.NEED_LOGIN_ERROR,exception);
throw exception;

}
 
import io.swagger.annotations.Api;
import org.springframework.boot.autoconfigure.web.ErrorProperties;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

@RestController
@Api(tags = "拦截Filter抛出的异常")
public class ErrorController extends BasicErrorController {
public ErrorController() {
super(new DefaultErrorAttributes(), new ErrorProperties());
}

public ErrorController(ErrorAttributes errorAttributes, ErrorProperties errorProperties) {
super(errorAttributes, errorProperties);
}

public ErrorController(ErrorAttributes errorAttributes, ErrorProperties errorProperties, List<ErrorViewResolver> errorViewResolvers) {
super(errorAttributes, errorProperties, errorViewResolvers);
}

@RequestMapping
@Override
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Object obj = request.getAttribute(CommonConsts.NEED_LOGIN_ERROR);
Map<String, Object> body = this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.ALL));
if (null != obj) {
/**
* 设置登录跳转错误码
*/
body.put("status",HttpStatus.UNAUTHORIZED);
}

HttpStatus status = this.getStatus(request);
return new ResponseEntity(body, status);
}
}
 
{
"timestamp": "2022-01-10 14:08:08",
"status": 401,
"error": "Internal Server Error",
"message": "无效token,请重新登录",
"path": "/xxxxx"
}

————————————————
版权声明:本文为CSDN博主「朽木要自雕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fenfenguai/article/details/122408992

推荐这些文章:

Java中如何进行异常处理

Try...catch...finally...
(1)使用try...catch...finally...语句处理异常,它捕获被命名为属于异常类的异常,并调用方法处理它,finally无论有无异常都会执行。
(2)形式:

1 try //监视
2 {
3 可能发生异常的代码块;
4 }
5 catch(异常类型 异常对象名)
6 //捕获并处理异常
7 {
8 异常处理代码块;
9 }finally {
10 //最终执行
11 }

(3)实例:

 
&nbs...

Java 之@WebFilter

一、参数说明

 二、代码示例

package filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servle...

067 自定义异常类

用代码描述如何定义异常类、抛出异常类以及捕捉异常类

class MyException(Exception):
pass

num = 12
try:
if num >= 10:
raise MyException('抛出异常')
print('正常执行代码')
except MyException:
print('发生了异常')

  
 

...

Java 捕获和抛出异常

 捕获和抛出异常
  
 
   
 
 自定义异常类
 
 实际应用中的经验总结:
  处理运行时异常时,采用逻辑去合理规避同时辅助 try-catch处理
  在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
  对于不确定的代码,也可以加上try-catch,处理潜在的异常
  尽量去处理异常,切忌只是简单地调用printStackTrace()去打印输出
  具体如何处理异常,要根据不同的业务需求和异常类型去决定。
  尽量添加finally语句块去释放占用的资源。 IO~...

32.自定义Java异常捕获处理类及其使用

自定义异常捕获处理类

/**
* <h1>异常捕捉</h1>
* */
public class ExceptionHandler implements Thread.UncaughtExceptionHandler {

@Override
public void uncaughtException(Thread t, Throwable e) {

StackTraceElement[] ses = e.getStackTrace();
System.err.println("Exception in thr...

Java面向对象:异常的捕获和抛出

异常的捕获和抛出
try、 catch、 finally、 throw、 throws
一、捕获异常

try {}:监控区域,需要监控异常的代码放在 try{} 里面

catch {}:捕获异常

finally {}:最后执行,也可以不要 finally {} 块,处理善后工作(假设开了IO,为节约资源,关闭IO)。

假设捕获(catch{})多个异常,需要从小到(从子类异常到父类异常)一个一个捕获

自动捕获异常快捷键 : 选中要监控异常的语句 Ctrl + Alt + T :try/catch/finally ...

示例:

public class Test...

Java web—Servlet过滤器(Filter)

前言:         过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器;因此这篇blog来单独总结下关于过滤器的知识点。

一、首先来了解一下什么是过滤器:
下面这句话引自这篇文章   Filte即过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的...

Java Filter(过滤器)和Listener(监听器)

Java Filter(过滤器)和Listener(监听器)
1.Filter(过滤器)
Filter:过滤器,用来过滤网站数据;
CharacterEncodingFilter
public class CharacterEncodingFilter implements Filter {
//初始化:web服务器启动,就已经初始化,随时等待过滤对象出现
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEnco...

Java web—Servlet的请求与响应

前言:         在家上网课快上疯了╰(‵□′)╯,上课连课本都没有,太难受了呜呜呜~, 只能在blog里记录一下这段时间的学习的内容,太难了…

一、servlet概述:
运行在WEB服务器端的一个JAVA小程序,也就是一个Java类。一个用来被用户访问的动态资源。通常把实现了Servlet接口的java类统称为Servlet...

Filter中抛出异常@RestControllerAdvice注解无法捕获的问题

搭建springboot+shiro+jwt的时候,发现RestControllerAdvice全局异常处理无法获取filter中的异常
记一次RestControllerAdvice无法拦截Filter内抛出异常
原因

请求进来 会按照 filter -> interceptor -> controllerAdvice -> aspect -> controller的顺序调用
当controller返回异常 也会按照controller -> aspect -> controllerAdvice -> interceptor -> filt...

文章标题:Java 捕获filter抛出的异常 自定义返回码
文章链接:https://www.dianjilingqu.com/51179.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>