Java拦截器+自定义注解

张开发
2026/4/16 8:00:31 15 分钟阅读

分享文章

Java拦截器+自定义注解
拦截器AuthInterceptorpackage com.xxxx.interceptor; import cn.hutool.json.JSONUtil; import com.xxxx.ann.FromAnnId; import com.xxxx.service.FromTokenService; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Method; import java.util.HashMap; Component public class AuthInterceptor implements HandlerInterceptor { Resource private FromTokenService tokenService; /** * 预处理 * * param request * param response * param handler * return * throws Exception */ Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) { return true; } HandlerMethod handlerMethod (HandlerMethod) handler; Method method handlerMethod.getMethod(); //被ApiIdempotment标记的扫描 FromAnnId fromAnnId method.getAnnotation(FromAnnId.class); if (fromAnnId ! null) { try { return tokenService.checkToken(request);// 幂等性校验, 校验通过则放行, 校验失败则抛出异常, 并通过统一异常处理返回友好提示 }catch (Exception ex){ HashMapString, Object hashMap new HashMap(); hashMap.put(msg,ex.getMessage()); hashMap.put(code,500); writeReturnJson(response, JSONUtil.toJsonStr(hashMap)); throw ex; } } //必须返回true,否则会被拦截一切请求 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 { } /** * 返回的json值 * param response * param json * throws Exception */ private void writeReturnJson(HttpServletResponse response, String json) throws Exception{ PrintWriter writer null; response.setCharacterEncoding(UTF-8); response.setContentType(text/html; charsetutf-8); try { writer response.getWriter(); writer.print(json); } catch (IOException e) { } finally { if (writer ! null) writer.close(); } } }添加拦截器WebConfiguration .javapackage com.xxxx.config; import com.xxxx.interceptor.AuthInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import javax.annotation.Resource; Configuration public class WebConfiguration extends WebMvcConfigurerAdapter { Resource private AuthInterceptor authInterceptor; /** * 添加拦截器 * param registry */ Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authInterceptor); super.addInterceptors(registry); } }自定义注解FromAnnId.javapackage com.xxxx.ann; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解 */ Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface FromAnnId { }

更多文章