import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class CommonInterceptor extends HandlerInterceptorAdapter{
private static final Logger LOGGER = LoggerFactory.getLogger(CommonInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String username = (String)request.getSession().getAttribute("user");
if(username == null){
LOGGER.info("Interceptor:跳转到login页面!");
//request.getRequestDispatcher("/view/login.jsp").forward(request, response); //此时web.xml url-pattern为/*
request.getRequestDispatcher("/login.jsp").forward(request, response); //此时web.xml url-pattern为/
return false;
}else
return true;
}
}
异常场景一:
/login.jsp -- /* 无法精确到login.jsp
异常场景二:
此时login.jsp 在文件夹view里面
request.getRequestDispatcher("/view/login").forward(request, response); //此时web.xml url-pattern为/* 此时仍出现异常
解决方案:<property name="prefix" value="/view/" /> request.getRequestDispatcher("/login").forward(request, response); [此处不修改报404]
异常场景三:
若以路径为过滤条件即request.getServletPath,且不可使用redirect跳转,因为该模式得到的路径永远为/
数据的传输:在request中的数据,forward可以访问,redirect不行,因为redirect已经是一个新的请求