SpringMVC拦截器之拦截跳转页面

package com.guide.interceptors;

import java.util.Enumeration;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class ProvinceInterceptor implements HandlerInterceptor{

	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		HttpSession session = request.getSession();
		Enumeration e = session.getAttributeNames();
		HashMap< String, String> map = new HashMap();
		while(e.hasMoreElements()){
			map.put(e.nextElement(),"");
		}
		if (map.containsKey("login_level")) {
			if (session.getAttribute("login_level").equals("prov")) {
				return true;
			}else{
				//response.sendError(501, "您已经退出。请重新登录");
				response.sendRedirect("/CscaCenter/login.jsp");
				return false;
			}
		}else{
			//response.sendError(502, "这里有点问题,请访问登录页面!");
			response.sendRedirect("/CscaCenter/login.jsp");
			return false;
		}
		
		
	}

	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
	}

	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
	}

}


response.sendRedirect是通过浏览器来做转向的。

假设在A.jsp页面设置request.setAttribute("username","admin");

那么在  request.sendredirect 转向的B.jsp页面中是不能通过request.getAttribute("username");  来得到admin的。

这是因为上个页面请求已经结束,也就是 request这个对象已经消亡了。所以也就得不到admin了。

可以使用request.getDispatcherHeader(B.jsp").forward(request,response);在B.jsp页面就可以得到admin了。

此外要说明:如果你的jsp页面是在webroot目录下,那么在response.sendRedirect(参数);参数中的路径是不同的。

response.sendRedirect(参数);应该是:response.sendRedirect(request.getContextPath() + "/B.jsp");



而在request.getDispatcherHeader(参数).forward(request,response);应该使用request.getDispatcherHeader("B.jsp").forward(request,response);

你可能感兴趣的:(JAVA基础)