SpringMVC利用攔截器攔截自定義註解
阿新 • • 發佈:2019-01-24
前幾篇文章裡寫了關於token的個人思考,那麼具體在程式碼中要怎麼實現攔截token,今天寫了一段程式碼,記錄一下
框架:SpringMVC Spring
執行環境:tomcat8
說一下思路:
1.自定一個註解,然後註解在我的Controller方法上
2.實現SpringMVC攔截器的類,重寫PreHandler方法,攔截得到註解實現功能
3.需要在配置中配置攔截類的攔截路徑
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/"/>
<bean class="Controller.AnnotationInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
/** * Created by sam on 2017/7/21. */ public class AnnotationInterceptor extends HandlerInterceptorAdapter{ private Logger logger = Logger.getLogger(this.getClass()); @Override public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception { logger.debug("進行攔截器"); if(handler instanceof HandlerMethod){ logger.debug("獲取到handler"); HandlerMethod hm = (HandlerMethod) handler; Method method = ((HandlerMethod) handler).getMethod(); Token token = method.getAnnotation(Token.class); if(token!= null){ logger.debug("token不為null"); String value = token.value(); request.setAttribute("txt",value); } } return true; } }
值得注意的是:
在攔截器類裡不一定能獲取Handler,需要手動配置兩個RequestMapping處理bean才能保證獲得Handler
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
至於為什麼這2個類配置上去就能保證獲得Handler我也不太瞭解,我會去查詢相關資料然後貼到部落格!