自定义拦截器

在struts2框架中有struts2提供的拦截器,如果项目不用struts2框架,这时候就需要自定义拦截器。拦截后通过action的处理,在根据被拦截前的路径跳转到相应的请求,这时就需要被拦截前的路径retrurnUrl保存在拦截器中。当拦截器处理完毕的时候通过returnUrl进行跳转

1.java类:SessionTimeOutFilter.java


package com.margin.filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class SessionTimeOutFilter extends com.usermgt.filter.BaseFilter {
	private Log log = LogFactory.getLog(SessionTimeOutFilter.class);

	protected String forwardTo = "/login.jsp";

	protected List checkedSessionAttribute = new ArrayList();

	protected List openedURL = new ArrayList();

	public void init(FilterConfig filterConfig) throws ServletException {
		forwardTo = this.initParameter(filterConfig, "forwardTo");
		checkedSessionAttribute = this.initListParameter(filterConfig,
				"checkedSessionAttribute");
		openedURL = this.initListParameter(filterConfig, "openedURL");
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest httpServletRequest = ((HttpServletRequest) request);
		String servletPath = httpServletRequest.getServletPath();
		
		if (servletPath.endsWith(".jsp") || servletPath.endsWith(".do")) {

			if (!openedURL.contains(servletPath)) {

				for (Iterator it = checkedSessionAttribute.iterator(); it
						.hasNext();) {
					if (httpServletRequest.getSession().getAttribute(
							(String) it.next()) == null) {
						request.setAttribute("url", getbeforeUrl(httpServletRequest, response));
						httpServletRequest.getRequestDispatcher(this.forwardTo)
								.forward(httpServletRequest, response);
						return;
					}
				}
			}
		}

		chain.doFilter(request, response);
	}

	
	private String getbeforeUrl(ServletRequest request,ServletResponse response){
		HttpServletRequest httpServletRequest = ((HttpServletRequest) request);
		Map map = request.getParameterMap();
		Iterator itt = map.entrySet().iterator();
		String params = "";
		while (itt.hasNext()){
			if(!"".equals(params))
			{
				params+="&";
			}
			Map.Entry entry = (Map.Entry)itt.next();
			Object key = entry.getKey();
			String [] value = (String []) entry.getValue();
			for(int i =0;i<value.length;i++){
				if(i>0){
					params +="&";
				}
				params += key + "=" + value[i];
			}	
		}
		String returnUrl = httpServletRequest.getServletPath();
		System.out.println("==========="+returnUrl);
		if (!"".equals(params))
			returnUrl = returnUrl + "?" + params;
		//returnUrl=URLEncoder.encode(returnUrl, "GBK");
		System.out.println("==========="+returnUrl);
		return returnUrl;
	}
	
	public void destroy() {

	}

}



上面的就是一个自定义的拦截器类。

2.web.xml配置


<filter>
	<filter-name>RefinancingSessionTimeoutFilter</filter-name>
	<filter-class>
		com.margin.filter.SessionTimeOutFilter
	</filter-class>
	<init-param>
		<param-name>forwardTo</param-name>
		<param-value>/mvoteRefinancing/pki.do?method=checkServerCert</param-value>
	</init-param>
	<init-param>
		<param-name>checkedSessionAttribute</param-name>
		<param-value>refinancing_caid</param-value>
	</init-param>
	<init-param>
		<param-name>openedURL</param-name>
		<param-value>
		</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>RefinancingSessionTimeoutFilter</filter-name>
	<url-pattern>/web/refinancing/*</url-pattern>
</filter-mapping>
<filter-mapping>
	<filter-name>RefinancingSessionTimeoutFilter</filter-name>
	<url-pattern>/refinancing/*</url-pattern>
</filter-mapping>




转载于:https://my.oschina.net/gao0516/blog/85134

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值