1. 自定義一個注解
@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的一部分。
2. @Target – 表示支持注解的程序元素的種類,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。如果Target元注解不存在,那么該注解就可以使用在任何程序元素之上。
3. @Inherited – 表示一個注解類型會被自動繼承,如果用戶在類聲明的時候查詢注解類型,同時類聲明中也沒有這個類型的注解,那么注解類型會自動查詢該類的父類,這個過程將會不停地重復,直到該類型的注解被找到為止,或是到達類結構的頂層(Object)。
4. @Retention – 表示注解類型保留時間的長短,它接收RetentionPolicy參數,可能的值有SOURCE(源文件中起作用), CLASS, 以及RUNTIME(保留到運行時起作用)。
2. 定義一個相應的攔截器,在springMVC配置文件中進行配置
攔截器:
spring為我們提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter這個適配器,繼承此類,可以非常方便的實現自己的攔截器。
可以根據我們的需要重寫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文件中添加攔截器
<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