来段代码提提神-那些无法回避的知识点之过滤器

吃饭回来,发现今天第一天上班却累的不行,已经立志减肥;


来段代码提提神--过滤器,貌似是不该也无法回避的知识点。他的存在使得我们的工作可以按我想要的结果运行。学习他,即使很少情况下我们会用到。


Java的项目的启动文件web.xml文件有很多标签大家可以学习一下:推荐问题(Filter、Servlet、Listener区别与联系)

第一步:配置在web.xml文件

<filter>
	  <description>登录的过滤器配置</description>
	  <filter-name>appFilter</filter-name>
	  <filter-class>com.san.console.filter.ApplicationFilter</filter-class>
	  <init-param>
	   <param-name>loginUrl</param-name>
	   <param-value>/login.jsp</param-value>
	  </init-param>
	</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.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.sand.o2oconsole.utils.WebConstant;

public class ApplicationFilter implements Filter {

	// 日志记录器
	public final Logger log = Logger.getLogger(this.getClass());

	String loginUrl = "";

	/**
	 *   20141127 
	 * @author yuanyirui 
	 * : 在方法后调用一个方法 ,比如动态代理就是拦截器的简单实现,过滤器是在java
	 * web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的
	 * action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者
	 * struts的action前统一设置字符集,或者去除掉一些非法字符。
	 * */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		HttpServletResponse httpResponse = (HttpServletResponse) response;
		HttpSession httpSession = httpRequest.getSession();

		Object sessionObject = httpSession
				.getAttribute(WebConstant.SESSION_EMPLOYEE_BEAN);

		// 获得请求地址
		StringBuffer requestUrl = httpRequest.getRequestURL();
		// 截取字符串 生成登录的地址
		String url = requestUrl.toString();
		if (httpSession != null && sessionObject != null) {// 如果session不为空,认定是登陆过来的
			chain.doFilter(httpRequest, httpResponse);
		} else if (StringUtils.containsIgnoreCase(url, "login.action")) { // url是login.action过来的,认定是登陆
			chain.doFilter(httpRequest, httpResponse);
		} else if (httpRequest.getHeader("x-requested-with") != null
				&& httpRequest.getHeader("x-requested-with").equalsIgnoreCase(
						"XMLHttpRequest")
				&& !StringUtils.containsIgnoreCase(url, "_login")) {
			PrintWriter printWriter = response.getWriter();
			printWriter.print("{sessionState:0}");
			printWriter.flush();
			printWriter.close();
		} else if (httpSession == null || sessionObject == null) {//session 为空的时候,跳转到登陆的状态
			httpResponse.sendRedirect(httpRequest.getContextPath() + loginUrl);//
		}
	}

	public void init(FilterConfig config) throws ServletException {
		loginUrl = config.getInitParameter("loginUrl");
	}

	public void destroy() {
	}

}


代码的时间已经相当久远了。那个啥,基本可以拿来就用;


你可能感兴趣的:(servlet,web.xml,filter,标签)