1.創建注解文件 (文件格式為注解) 這里面什么都不需要寫 文件名就是注解名稱 如下 是@anno
package com.ABC123.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定義注解. 在方法上添加這個注解. 必須登錄之后才能執行這個方法
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface anno {
}
2.創建一個類先實現HandlerInterceptor接口里面的方法 當然不想要全部都實現可以繼承他的適配器HandlerInterceptorAdapter類
package com.ABC123.inter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.ABC123.anno.anno;
import com.ABC123.utils.UserContext;
public class LoginInter extends HandlerInterceptorAdapter {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
//之前攔截
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object obj) throws Exception {
//你請求的目標必須是方法
if(obj instanceof HandlerMethod) {
HandlerMethod hm = (HandlerMethod) obj;
Object o = hm.getMethodAnnotation(anno.class);
if(o==null) {//沒有這個注解
return true;
}else {//有注解
if(UserContext.getCurrent() == null) {//沒有登錄
resp.sendRedirect("/paike/login.jsp");
return false;
}else { //登錄了
return true;
}
}
}
return true;
}
}
3.最后配置springmvc的xml文件
<!-- 開啟mvc --> <mvc:annotation-driven /> <bean id="inter" class="com.ABC123.inter.LoginInter"></bean> <!-- 攔截器配置 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/><!-- 攔截所有 --> <ref bean="inter"/> </mvc:interceptor> </mvc:interceptors>
4.在需要攔截的類上面寫生注解@anno

當進入這個已經有注解的方法時會先經過攔截 符合的才放行
