TokenInterceptor()).addPathPatterns
时间: 2023-11-22 13:56:34 浏览: 53
这段代码是一个拦截器,用于拦截请求并进行处理。其中 `addPathPatterns` 是用于设置拦截路径的方法,可以添加多个路径进行拦截。在这个方法中,需要传入一个字符串数组,表示需要拦截的路径。例如:
```
registry.addInterceptor(new TokenInterceptor())
.addPathPatterns("/api/**") // 拦截 /api 下的所有请求
.addPathPatterns("/admin/**"); // 拦截 /admin 下的所有请求
```
上面的代码表示将 `TokenInterceptor` 拦截器应用于 `/api` 和 `/admin` 路径下的所有请求。
相关问题
java拦截器判断请求成功失败_springboot拦截器过滤token,并返回结果及异常处理操作...
好的,我可以回答你关于 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 进行验证,并返回结果及异常处理操作了。
阅读全文