1. 程式人生 > 實用技巧 >Spring實現自定義註解並且配置攔截器進行攔截

Spring實現自定義註解並且配置攔截器進行攔截

有時候我們會自定義註解,並且需要配置攔截器對請求方法含有該自定義註解的方法進行攔截操作

自定義註解類

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;
    }