session过期 点击跳转到登陆页

自己总结的:


package cn.com.**.**.personalCenter.filter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class SessionFilter implements Filter{
	private static final int NOT_VALID = -1;
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		httpRequest.setCharacterEncoding("UTF-8");
		
		HttpSession session = httpRequest.getSession();
		String oneOfLoginUrl = "http://localhost:8020/ecenter/views/ecenterClub/loginRegisterNew/newloginClub.jsp";
		String requestURI = httpRequest.getRequestURI();
//		String path = url.substring(url.lastIndexOf("/"));
//		boolean isLogin = requestURI.indexOf("login.jsp") != NOT_VALID || requestURI.indexOf("newloginClub.jsp") != NOT_VALID;//这个对loginRegisterNew中的文件会失效
		boolean isLogin = requestURI.indexOf("login") != NOT_VALID;//这样不会过滤部分样式和js文件就能正常显示了
		//超时处理,ajax请求超时设置超时状态,页面请求超时则返回提示并重定向 
//		if((path.indexOf(".jsp") != -1) && (session.getAttribute("entryId") == null) && (path.equals("/login.jsp") == false)){
		if(!isLogin && (session.getAttribute("entryId") == null || "".equals(session.getAttribute("entryId")))){
			//判断是否为ajax请求
//			if(httpRequest.getHeader("x-requested-with") != null && httpRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
//				httpResponse.addHeader("sessionStatus", "timeOut");
//				httpResponse.addHeader("loginPath", oneOfLoginUrl);
//			} else {
				String str = "<script type='text/javascript'> alert('回话过期,请重新登录');"
						+ "window.top.location.href='"
						+ oneOfLoginUrl
						+ "';</script>";
				response.setContentType("text/html;charset=UTF-8");//解决中文乱码
				try{
					//response到请求页
					PrintWriter writer = response.getWriter();
					writer.write(str);
					writer.flush();
					writer.close();
				} catch (Exception e){
					e.printStackTrace();
				}
//			} 
		} else {
			chain.doFilter(request, response);
		}
		
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

}

如果登陆页没有除缓存最好在 response.setContentType( "text/html;charset=UTF-8" ); // 解决中文乱码

后边加上

	response.setHeader("Pragma","No-cache");          
        response.setHeader("Cache-Control","no-cache");   
        response.setHeader("Cache-Control", "no-store");   
        response.setDateHeader("Expires",0);



实际项目:

package cn.com.**.**.utils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SuppressWarnings("serial")
public class SecurityFilter extends HttpServlet implements Filter{
	Logger logger = LoggerFactory.getLogger(SecurityFilter.class);
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
			
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest _request=(HttpServletRequest)request;     
        HttpServletResponse _response  =(HttpServletResponse) response;      
        HttpSession session = _request.getSession(true);       
        String entryId = (String)session.getAttribute("entryId");//登录人
        logger.info("[个人中心过滤器]:entryId登录用户:" + entryId);
        String url=_request.getRequestURI();     
        String href = request.getParameter("h");
        logger.info("[个人中心过滤器]url==="+url+",href==="+href+",_request.getContextPath()==="+_request.getContextPath());
        if(!"".equals(CheckNull.check(href)) && !href.startsWith("http://www.epicc.com.cn")&&!href.startsWith("http://11.207.58.71:8100")&&!href.startsWith("http://11.201.1.18")&&!href.startsWith("http://11.207.58.72:8000")
        		&&!href.startsWith("http://11.207.58.75:8000")&&!href.startsWith("http://11.207.58.72:8300")){
        	logger.info("[个人中心过滤器]不在规定的地址范围内,跳转到登录页面");
        	_response.sendRedirect(_request.getContextPath() + "/views/ecenterClub/loginRegisterNew/login.jsp");  
		}
   
        //单点登录过滤
//        if(url.indexOf(";jsessionid")>-1){
//        	
//        	_response.sendRedirect(url.substring(0,url.indexOf(";jsessionid")));
//        }
        
        if(entryId == null || "".equals(entryId)) {        
             //判断获取的路径不为空且不是访问登录页面或执行登录操作时跳转    proposalModule/proposal/queryProposalInfo
        	 //1.不过滤资源文件 2.不过滤登陆注册模块 3 不过滤投保单详情和保单详情
        	 if(url.indexOf("claimIndex.jsp")>0){
         		_response.sendRedirect(_request.getContextPath() + "/views/ecenterClub/loginRegisterNew/login.jsp");   
         	 }
        	
        	 if(!isValided(url)) {
         			logger.info("[个人中心过滤器]isValided(url)===false");
        		_response.sendRedirect(_request.getContextPath() + "/views/ecenterClub/loginRegisterNew/login.jsp");
        		logger.info(_request.getContextPath() + "/views/ecenterClub/loginRegisterNew/login.jsp");
                 return ;     
             }                
         }
     
         chain.doFilter(request, response);     
         return;    
		
	}
	
	/**
	 * 校验url是否被登陆过滤器拦截
	 * @param url
	 * @return
	 */
	private boolean  isValided(String url){

		boolean urlValue = false;
		if(url==null||"".equals(url)){
			urlValue = false;
		}
		List<String> urlLi = new ArrayList<String>();
		urlLi.add("/ecenter/loginRegister");
		urlLi.add("login");
		urlLi.add(".css");
		urlLi.add(".jpg");
		urlLi.add("CreateImage");
		urlLi.add(".js");
		urlLi.add(".png");
		urlLi.add(".gif");
		urlLi.add("bindEmail");
		urlLi.add("searchOrdersDetail");
		urlLi.add("ecenterController/ecenterService");
		urlLi.add("/wapcustomer/validEmail");
		urlLi.add("/proposalModule/proposal/queryProposalInfo");
		urlLi.add("/ecenter/views/loginRegister/support/loginForOther.jsp");
		urlLi.add("insurAndClaimsforIndex");
		urlLi.add("/ecenter/policyModule/Policy/carPolicyDetail");
		urlLi.add("/ecenter/policyModule/Policy/ebsPolicyDetail");
		urlLi.add("/ecenter/loginRegister/longinByYaHooEmail");
		urlLi.add("/ecenter/insuringAndClaims/PolicyClaimCheck/policyClaim/carClaim");
		urlLi.add("/ecenter/insuringAndClaims/PolicyClaimCheck/policyClaim/noCarEbsClaim");
		urlLi.add("/ecenter/insuringAndClaims/PolicyClaimCheck/policyClaim/noCarPolicy");
		urlLi.add("/ecenter/insuringAndClaims/PolicyClaimCheck/policyClaim/getClaimList");
		urlLi.add("/ecenter/insuringAndClaims/PolicyClaimCheck/policyClaim/getClaimDetail");
		urlLi.add("/ecenter/orderModule/order/getCarOrderInfo");
		urlLi.add("/catchPac");
		urlLi.add("/ecenter/views/policyModule");
		urlLi.add("/ecenter/personalInfo/customerInfo/saveCarSecretary");
		urlLi.add("/ecenter/personalInfo/customerInfo/sendCarVaildCode");
		urlLi.add("/ecenter/personalInfo/customerInfo/checkVaildCode");
		urlLi.add("/ecenter/personalInfo/customerInfo/getLandEno");
		urlLi.add("/ecenter/personalInfo/customerInfo/carSecretary");
		urlLi.add("/ecenter/orderModule/order/getCarOrderInfoShow");
		urlLi.add("/ecenter/servicesModule/consultation");
		urlLi.add("/ecenter/orderModule/order/getErrorOrderInfo");
		urlLi.add("/ecenter/policyModule/Policy/getEpolicyInfo");
		urlLi.add("/ecenter/policyModule/Policy/getfeicheEpolicyInfo");
		urlLi.add("My97DatePicker.htm");
		urlLi.add("/ecenter/orderModule/order/getErrorYingyeInfo");
		urlLi.add("/ecenter/insuringAndClaims/PolicyClaimCheck/policyClaim/YingXiaoDetail");
		urlLi.add("/ecenter/policyModule/Policy/ebsPolicyDetail");
		urlLi.add("/ecenter/views/errorPages/error404.html");
		urlLi.add("/ecenter/policyModule/Policy/validateRand");
		urlLi.add("/ecenter/policyDownload/Download/policyDownloadForPosPDF");
		urlLi.add("/ecenter/policyDownload/Download/policyDownload");
		urlLi.add("/ecenter/insuringAndClaims/PolicyClaimCheck/policyClaim");
		urlLi.add("/sendPac");
		urlLi.add("/ecenter/servicesModule/catchTBpack/getPack");
		urlLi.add("/ecenter/servicesModule/catchTBpack/sendPack");
		urlLi.add("/ecenter/servicesModule/activityPageConfig/tuangou");
		urlLi.add("/ecenter/servicesModule/activityPageConfig/getCountyByCity");
		urlLi.add("/ecenter/servicesModule/activityPageConfig/getActivityDetails");
		urlLi.add("/ecenter/servicesModule/freesave/validateCardId");
		urlLi.add("/ecenter/servicesModule/freesave/validateName");
		urlLi.add("/ecenter/servicesModule/freesave/validateEmail");
		urlLi.add("/ecenter/servicesModule/freesave/activateFreeSave");
		urlLi.add("/ecenter/servicesModule/freesave/getPageUserCardInfoMsg");
		urlLi.add("/ecenter/views/servicesModule/creditCardBlindQuery.jsp");
		urlLi.add("/ecenter/views/servicesModule/activateFreeSave.jsp");
		urlLi.add("/ecenter/views/servicesModule/unRegisterActivate.jsp");
		urlLi.add("/ecenter/views/servicesModule/registeredActivate.jsp");
		urlLi.add("/ecenter/servicesModule/checkStore/CheckStoreCode");
		urlLi.add("/ecenter/sendpac");
		urlLi.add("/ecenter/policyModule/Policy/checkReleStatus");
		//add 20140825 start**改版流程 添加  
		urlLi.add("/ecenter/proposalModule/proposal/carJQProposalInfo");
		urlLi.add("/ecenter/proposalModule/proposal/EADproposalInfo");
		urlLi.add("/ecenter/orderModule/order/DATGroupOrderDetail");
		//add 20140825 end 
		urlLi.add("/ecenter/shortUrl/jpage");
		urlLi.add("/ecenter/shortUrl/validRand");
		urlLi.add("/ecenter/policyModule/Policy/queryClaimInfo");
		urlLi.add("/ecenter/servicesModule/gift/queryGift");
		//ebs-4349 两个网络整合
		urlLi.add("/ecenter/ecenterClub");
		urlLi.add("/ecenter/views/ecenterClub/loginRegisterNew/login.jsp");
		
		//EBS-4828 **首页页面查询
		urlLi.add("/ecenter/servicesModule/panicbuy/queryPanicBuyInfo");
		urlLi.add("/ecenter/views/servicesModule/panicBuySrc.jsp");
				
		//add 20141107 end 
		urlLi.add("/ecenter/servicesModule/memberNew/getQxInfo");
		urlLi.add("/ecenter/servicesModule/suggestion");
		urlLi.add("/ecenter/servicesModule/memberNewCon");
		urlLi.add("/ecenter/servicesModule/netorg");
		urlLi.add("/ecenter/servicesModule/website");
		urlLi.add("/ecenter/ecenterClub/loginRegisterNew/newLogin/isBeforeEntry");
		urlLi.add("getEntry");
		urlLi.add("/ecar/payment/entryDefray");
		urlLi.add("/eproperty/pay");
		for(int i=0; i<urlLi.size(); i++){
			if(url.indexOf(urlLi.get(i)) >= 0){
				urlValue = true;
				break;
			}
		}
		if("/ecenter/insuringAndClaims/PolicyClaimCheck/policyClaimNewIndex/getPolicyPage".equals(url)){
			urlValue=false;
		}
		return urlValue;
	
	}
}

web.xml

<!-- begin session过期验证 -->
	<filter>
		<filter-name>SessionFilter</filter-name>
		<filter-class>cn.com.**.**.personalCenter.filter.SessionFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>SessionFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
 	<!-- end --> 
	
	<!-- 过滤器 登陆状态 -->
	<filter>
		<filter-name>SecurityFilter</filter-name>
		<filter-class>cn.com.**.**.utils.SecurityFilter</filter-class>
	</filter>
	    <!-- 安全登陆过滤 -->
	<filter-mapping>
		<filter-name>SecurityFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


你可能感兴趣的:(session过期 点击跳转到登陆页)