欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Java拦截器实现拦截controller方法

时间:2023-07-02

1,定义拦截器

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@Componentpublic class AuthorityInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.info("进入到拦截器中:preHandle() 方法"); HandlerMethod handlerMethod=(HandlerMethod)handler; AccessIntercept loginVerify=handlerMethod.getMethodAnnotation(AccessIntercept.class); if (loginVerify!=null){ System.out.println(loginVerify.IsIntercept()); logger.info("不需要对 @loginVerify注解方法 进行拦截"); return false; }else { logger.info("对非@loginVerify注解方法 进行拦截处理"); System.out.println(request.getServletPath()); System.out.println(request.getParameter("id")); return true; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { logger.info("进入到拦截器中:postHandle() 方法中"); System.out.println(request.getRequestURI()); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { logger.info("进入到拦截器中:afterCompletion() 方法中"); System.out.println(request.getServletPath()); }}

2,配置拦截器

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configurationpublic class InterceptorAdapterConfig extends WebMvcConfigurerAdapter { @Autowired// private RequestLimitIntercept authorityInterceptor; private AuthorityInterceptor authorityInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { //注册自己的拦截器并设置拦截的请求路径 registry.addInterceptor(authorityInterceptor).addPathPatterns("/**"); super.addInterceptors(registry); }}

3,自定义注解

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface AccessIntercept { boolean IsIntercept() default true;}

4,使用自定义注解

在controller中的方法上面使用@AccessIntercept注解。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。