1. 自定義一個註解html
@Documented //文檔生成時,該註解將被包含在javadoc中,可去掉 @Target(ElementType.METHOD)//目標是方法
@Retention(RetentionPolicy.RUNTIME) //註解會在class中存在,運行時可經過反射獲取 @Inherited public @interface AuthLoginAnnotation {
/**
* 檢查是否已登陸(註解的參數)
*
* @return true-檢查;默認不檢查爲false
*/ boolean check() default false; }
1. @Documented – 表示使用該註解的元素應被javadoc或相似工具文檔化,它應用於類型聲明,類型聲明的註解會影響客戶端對註解元素的使用。若是一個類型聲明添加了Documented註解,那麼它的註解會成爲被註解元素的公共API的一部分。java
2. @Target – 表示支持註解的程序元素的種類,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。若是Target元註解不存在,那麼該註解就能夠使用在任何程序元素之上。web
3. @Inherited – 表示一個註解類型會被自動繼承,若是用戶在類聲明的時候查詢註解類型,同時類聲明中也沒有這個類型的註解,那麼註解類型會自動查詢該類的父類,這個過程將會不停地重複,直到該類型的註解被找到爲止,或是到達類結構的頂層(Object)。spring
4. @Retention – 表示註解類型保留時間的長短,它接收RetentionPolicy參數,可能的值有SOURCE(源文件中起做用), CLASS, 以及RUNTIME(保留到運行時起做用)。數組
2. 定義一個相應的攔截器,在springMVC配置文件中進行配置mvc
攔截器:app
spring爲咱們提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter這個適配器,繼承此類,能夠很是方便的實現本身的攔截器。ide
能夠根據咱們的須要重寫preHandle(預處理)、postHandle後處理(調用了Service並返回ModelAndView,但未進行頁面渲染)、afterCompletion返回處理(已經渲染了頁面)。工具
public class AuthLoginInteceptor extends HandlerInterceptorAdapter { @Autowired UserInfoService userInfoService ;
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod methodHandler=(HandlerMethod) handler; AuthCheckAnnotation auth=methodHandler.getMethodAnnotation(AuthCheckAnnotation.class); //若是@AuthLoginAnnotation (check=false) 這裏的auth爲false,即不用進行攔截驗證,@AuthCheckAnnotation默認爲前面定義的true if(auth!=null&&!auth.check()){ if(!isLogin(request)){
request.getRequestDispatcher("login.do").forward(request, response);
return false;
} } return true; } }
3. 在springMVC.xml文件中添加攔截器post
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*.do" />
<bean class="com.k.common.interceptor.AuthLoginInteceptor "/>
</mvc:interceptor>
</mvc:interceptors>
4. 在springMVC controller中使用實例
@AuthLoginAnnotation(check=true) @RequestMapping("tomember.do") @ResponseBody public Object toMember(HttpServletRequest request,HttpServletResponse response){ ....... return Ret.toJson(responseBody); }
參考一篇ImportNew中簡單講解JAVA註解的文章:http://www.importnew.com/14479.html