Spring Boot 在拦截器中获取 Controller 中的注解
Spring Boot About 1,143 words需求
在HandlerInterceptor拦截器中获取Controller中的注解,判断是否标注了注解,获取注解中的值等。
实现
自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RateLimiter {
}
标注 Controller
@RequiredArgsConstructor
@RestController
public class LoginController {
private final LoginService loginService;
@RateLimiter
@PostMapping(value = "/login")
public Credentials login(@RequestBody Identity identity) {
return loginService.login(identity);
}
}
获取注解
当在HandlerInterceptor注入在Spring MVC时,他的参数Object handler类型是HandlerMethod。
使用HandlerMethod可以获取Controller中的诸多元信息,包括注解、方法名、参数类型等。
@Slf4j
public class RateLimiterInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod hm) {
if (hm.hasMethodAnnotation(RateLimiter.class)) {
RateLimiter limiter = hm.getMethodAnnotation(RateLimiter.class);
// TODO
}
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
}
Views: 3,197 · Posted: 2023-02-05
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...