package com.xmg.p2p.base.util;
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 RequireLogin {
}
package com.xmg.p2p.base.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
/**
* 前台专门用于登陆检查的拦截器
*
*/
public class LoginCheckInterceptor extends HandlerInterceptorAdapter {
//或者也可以用 implement HandlerInterceptor 来做
//适配器实现了HandlerInterceptor的所有方法 我们只需去覆盖需要用到的方法即可
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//判断登陆逻辑
//判断当前请求的方法
if (handler instanceof HandlerMethod) { //HandlerMethod包装了我这次请求要访问的controller里的具体方法
HandlerMethod hm = (HandlerMethod) handler ;
RequireLogin rl = hm.getMethodAnnotation(RequireLogin.class);//获取到当前方法上是否有注解
//rl != null 说明该方法需要登陆才能访问
if (rl != null && UserContext.getCurrent() == null ) {
response.sendRedirect("/login.html");
return false ; //阻止继续执行
}
}
return super.preHandle(request, response, handler); //正常的放行
}
}