java拦截器判断请求成功失败_springboot拦截器过滤token,并返回结果及异常处理操作...
时间: 2023-12-15 16:05:28 浏览: 253
springboot全局异常处理Java 异常拦截类,复制粘贴即用,返回对应的HTTP状态码
5星 · 资源好评率100%
好的,我可以回答你关于 Spring Boot 拦截器过滤 Token 的问题,并返回结果及异常处理操作。
首先,在 Spring Boot 中,我们可以通过实现 `HandlerInterceptor` 接口来创建拦截器。在拦截器中,我们可以实现 `preHandle` 方法来对请求进行预处理,实现 `postHandle` 方法来处理请求后的逻辑,以及实现 `afterCompletion` 方法来处理完成请求后的逻辑。
下面是一个基本的拦截器实现,用于过滤 Token:
```java
@Component
public class TokenInterceptor implements HandlerInterceptor {
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
if (token == null || token.isEmpty()) {
throw new TokenException("Token不存在");
} else {
boolean valid = tokenService.isValid(token);
if (!valid) {
throw new TokenException("Token无效");
}
}
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 {
// 处理完成请求后的逻辑
}
@Data
public static class TokenException extends RuntimeException {
private String message;
public TokenException(String message) {
this.message = message;
}
}
}
```
在 `preHandle` 方法中,我们首先获取请求头中的 Token,如果 Token 不存在,我们就抛出一个 `TokenException` 异常,如果存在,则调用 `TokenService` 中的方法进行验证,如果验证失败,也抛出异常。
在抛出异常的时候,我们可以定义一个自定义异常类,将错误信息包装进去,并在全局异常处理中进行处理。下面是一个全局异常处理类:
```java
@RestControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(TokenInterceptor.TokenException.class)
public ResponseEntity<String> handleTokenException(TokenInterceptor.TokenException exception) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
.body(exception.getMessage());
}
}
```
在这个类中,我们使用了 `@RestControllerAdvice` 注解来标记这是一个全局异常处理类,并在 `handleTokenException` 方法中,对 `TokenException` 进行异常处理,将错误信息返回给前端。
最后,在 Spring Boot 主类中,我们需要将拦截器加入到拦截器链中,如下所示:
```java
@SpringBootApplication
public class Application implements WebMvcConfigurer {
@Autowired
private TokenInterceptor tokenInterceptor;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tokenInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login"); // 排除登录接口
}
}
```
在这个例子中,我们将拦截器加入到了拦截器链中,并将其拦截所有的请求。同时,我们排除了登录接口,因为登录接口是需要获取 Token 的。
这样,我们就可以通过拦截器对 Token 进行验证,并返回结果及异常处理操作了。
阅读全文