有时候我们会自定义注解,并且需要配置拦截器对请求方法含有该自定义注解的方法进行拦截操作
自定义注解类
NeedToken.java
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * 自定义注解 表示该方法需要token */ @Retention(RUNTIME) @Target({ElementType.METHOD}) @Documented public @interface NeedToken { }
TokenInterceptor.java
import net.sf.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; /** * token请求拦截器 */ public class TokenInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod){ HandlerMethod handlerMethod= (HandlerMethod) handler; Method method=handlerMethod.getMethod(); NeedToken needToken=method.getAnnotation(NeedToken.class); if (needToken!=null){ //存在注解 } } return true; } }
然后在Spring的配置文件里面增加或者修改
<bean id="tokenInterceptor" class="com.test.TokenInterceptor"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="interceptors"> <list> <ref bean="tokenInterceptor"/> </list> </property> </bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> </list> </property> </bean>
控制器方法中
@RequestMapping(value = "/showx") @NeedToken //增加注解 public void show(){ return null; }
原文:https://www.cnblogs.com/pxblog/p/13999417.html