基于注解,HandlerInterceptorAdapter 拦截器
第一步:自定义注解
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 AccessRequired {
}
第二步:创建拦截器类
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.zhangchu.chat.commen.annotation.AccessRequired;
import com.zhangchu.chat.domain.Employee;
import com.zhangchu.chat.utils.SessionUtil;
public class EmployeeLoginInterceptor extends HandlerInterceptorAdapter{
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
AccessRequired annotation = method.getAnnotation(AccessRequired.class);
if (annotation != null) {
Employee employee = (Employee) SessionUtil.getAttribute("employee");
if(employee==null||employee.getUsername()==null){
//跳转到登陆界面
response.sendRedirect(request.getContextPath()+"/empLogin/LoginEmpUI");
}
}
// 没有注解通过拦截
return true;
}
}
第三步:配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/chat/UI"/> <!-- 被拦截的目录 这里指定到特定的controller-->
<bean class="com.zhangchu.chat.controller.EmployeeLoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
实现如下
@Controller
@RequestMapping("/chat")
public class ChatController {
@RequestMapping("UI")
@AccessRequired
public String UI(HttpServletRequest request){
}
}
这样 如果访问chat/UI 会被拦截器拦截,如果session域中取不到指定的东东话, 就会跳转到登录界面
在登录控制里面 登录成功以后 向session域中添加指定类