当前位置: 移动技术网 > IT编程>开发语言>Java > Java中filter用法完整代码示例

Java中filter用法完整代码示例

2019年07月19日  | 移动技术网IT编程  | 我要评论

本文研究的主要是java中filter过滤器的相关用法,具体实现代码如下。

filter过滤器主要使用于前台向后台传递数据是的过滤操作。程度很简单就不说明了,直接给几个已经写好的代码:

一、使浏览器不缓存页面的过滤器

import javax.servlet.*;
import javax.servlet.http.httpservletresponse;
import java.io.ioexception;
/**
 * 用于的使 browser 不缓存页面的过滤器
 */
public class forcenocachefilter implements filter {
  public void dofilter(servletrequest request, servletresponse response, filterchain filterchain) throws ioexception, servletexception
  {
    ((httpservletresponse) response).setheader("cache-control","no-cache");
    ((httpservletresponse) response).setheader("pragma","no-cache");
    ((httpservletresponse) response).setdateheader ("expires", -1);
    filterchain.dofilter(request, response);
  }
  public void destroy()
  {
  }
  public void init(filterconfig filterconfig) throws servletexception
  {
  }
}

二、检测用户是否登陆的过滤器

public class checkloginfilter implements filter  {  
  protected filterconfig filterconfig = null;  
  private string redirecturl = null;  
  private list notcheckurllist = new arraylist();  
  private string sessionkey = null;  

  public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception  
  {  
    httpservletrequest request = (httpservletrequest) servletrequest;  
    httpservletresponse response = (httpservletresponse) servletresponse;  

    httpsession session = request.getsession();  
    if(sessionkey == null)  
    {  
      filterchain.dofilter(request, response);  
      return;  
    }  
    if((!checkrequesturiintnotfilterlist(request)) && session.getattribute(sessionkey) == null)  
    {  
      response.sendredirect(request.getcontextpath() + redirecturl);  
      return;  
    }  
    filterchain.dofilter(servletrequest, servletresponse);  
  }  

  public void destroy()  
  {  
    notcheckurllist.clear();  
  }  

  private boolean checkrequesturiintnotfilterlist(httpservletrequest request)  
  {  
    string uri = request.getservletpath() + (request.getpathinfo() == null ? "" : request.getpathinfo());  
    return notcheckurllist.contains(uri);  
  }  

  public void init(filterconfig filterconfig) throws servletexception  
  {  
    this.filterconfig = filterconfig;  
    redirecturl = filterconfig.getinitparameter("redirecturl");  
    sessionkey = filterconfig.getinitparameter("checksessionkey");  

    string notcheckurlliststr = filterconfig.getinitparameter("notcheckurllist");  

    if(notcheckurlliststr != null)  
    {  
      stringtokenizer st = new stringtokenizer(notcheckurlliststr, ";");  
      notcheckurllist.clear();  
      while(st.hasmoretokens())  
      {  
        notcheckurllist.add(st.nexttoken());  
      }  
    }  
  }  
}

三、字符编码的过滤器

import javax.servlet.*;
import java.io.ioexception;
/** 
 * 用于设置 http 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理html form请求参数的中文问题 
 */
public class characterencodingfilter  
implements filter  
{
	protected filterconfig filterconfig = null;
	protected string encoding = "";
	public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception  
	  {
		if(encoding != null)  
		      servletrequest.setcharacterencoding(encoding);
		filterchain.dofilter(servletrequest, servletresponse);
	}
	public void destroy()  
	  {
		filterconfig = null;
		encoding = null;
	}
	public void init(filterconfig filterconfig) throws servletexception  
	  {
		this.filterconfig = filterconfig;
		this.encoding = filterconfig.getinitparameter("encoding");
	}
}

四、记录用户的访问操作器

package com.qwserv.itm.pfl.log.svr;
import java.io.ioexception;
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 java.text.simpledateformat;
import javax.servlet.http.httpservletrequest;
import com.qwserv.itm.api.pfl.sm.vo.person;
import java.sql.*;
import com.qwserv.itm.api.serviceaccess;
import com.qwserv.itm.util.toolkit.debugutil;
public class observefilter implements filter {
	protected static debugutil log = debugutil.getinstances("pfl-log", observefilter.class);
	public void destroy() {
	}
	public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception,
	  servletexception {
		//记录用户的访问操作
		httpservletrequest request1 = (httpservletrequest)request;
		stringbuffer url = request1.getrequesturl();
		//对url进行过滤,如果是js/css/image则不进行处理
		if (judgefile(url.tostring())){
			string opertime = new simpledateformat("yyyy-mm-dd hh:mm:ss").
			          format(new java.util.date());
			string hostip = request.getremoteaddr();
			string sessionid = request1.getrequestedsessionid();
			string userid = "";
			person person = (person)request1.getsession().getattribute("userobj");
			if (null != person && null != person.getuser()){
				userid = person.getuser().getid();
			}
			string querystring = request1.getquerystring();
			if (null != querystring) {
				url.append('?');
				url.append(querystring);
			}
			//保存到数据库中
			savetodb(userid,hostip,sessionid,url.tostring(),opertime,"");
		}
		// pass control on to the next filter
		chain.dofilter(request, response);
	}
	public void init(filterconfig filterconfig) throws servletexception {
	}
	public boolean judgefile(string url){
		if (url.endswith(".gif") || url.endswith(".jpg") || url.endswith(".png")
		        || url.endswith(".bmp") || url.endswith(".css") || url.endswith(".js")
		        || url.endswith(".jsx")){
			return false;
		} else {
			return true;
		}
	}
	public int savetodb(string userid, string hostip,string sessionid,string url,
	      string opertime,string desc){
		//将报表任务数据保存到数据库中
		connection conn = null;
		statement st = null;
		try {
			//构造sql表达式,将数据插入数据库
			conn = serviceaccess.getsystemsupportservice().getdefaultconnection();
			st = conn.createstatement();
			string sql = "insert into log_observe_history(userid,url,detail,sessionid,hostname,startdate)  values('"+
			          userid + "','" + url + "','" + desc + "','" + sessionid
			          + "','" + hostip + "','" + opertime + "')";
			if (serviceaccess.getsystemsupportservice().getconnectiontype(conn)==serviceaccess.getsystemsupportservice().jca_type_oracle){
				sql = "insert into log_observe_history(id,userid,url,detail,sessionid,hostname,startdate) values(log_observe_seq.nextval,'"+
				            userid + "','" + url + "','" + desc + "','" + sessionid
				            + "','" + hostip + "',to_date('" + opertime
				            + "','yyyy-mm-dd hh24:mi:ss'))";
			}
			st.executeupdate(sql);
		}
		catch (exception e) {
			e.printstacktrace();
			log.error("--------------------the url string is:" + url + "-------------------------------");
			return 1;
			//表示操作失败
		}
		finally {
			if (null != st)
			      {
				try{
					st.close();
				}
				catch(exception e)
				        {
					e.printstacktrace();
				}
				st = null;
			}
			if (conn != null) {
				try {
					conn.close();
				}
				catch (exception e) {
					e.printstacktrace();
				}
				conn = null;
			}
		}
		return 0;
		//表示操作成功
	}
}
<filter>
<filter-name>observefilter</filter-name>
<filter-class>com.qwserv.itm.pfl.log.svr.observefilter</filter-class>
</filter>
<filter-mapping>
<filter-name>observefilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

五.filter防止用户访问一些未被授权的资源

package com.drp.util.filter;
import java.io.ioexception;
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;
public class authfilter implements filter {
	public void destroy() {
	}
	public void dofilter(servletrequest servletrequest, servletresponse servletresponse,  
	      filterchain filterchain) throws ioexception, servletexception {
		//1,dofilter方法的第一个参数为servletrequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和http请求头)的完全访问。第二个参数为servletresponse,通常在简单的过滤器中忽略此参数。最后一个参数为filterchain,此参数用来调用servlet或jsp页。  
		httpservletrequest request = (httpservletrequest)servletrequest;
		//;//如果处理http请求,并且需要访问诸如getheader或getcookies等在servletrequest中无法得到的方法,就要把此request对象构造成httpservletrequest  
		httpservletresponse response = (httpservletresponse)servletresponse。  
		        string currenturl = request.getrequesturi();
		//取得根目录所对应的绝对路径:  
		string targeturl = currenturl.substring(currenturl.indexof("/", 1), currenturl.length());
		//截取到当前文件名用于比较  
		httpsession session = request.getsession(false);
		if (!"/login.jsp".equals(targeturl)) {
			//判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环  
			if (session == null || session.getattribute("user") == null) {
				//*用户登录以后需手动添加session  
				system.out.println("request.getcontextpath()=" + request.getcontextpath());
				response.sendredirect(request.getcontextpath() + "/login.jsp");
				//如果session为空表示用户没有登录就重定向到login.jsp页面  
				return;
			}
		}
		//加入filter链继续向下执行  
		filterchain.dofilter(request, response);
		//.调用filterchain对象的dofilter方法。filter接口的dofilter方法取一个filterchain对象作为它的一个参数。在调用此对象的dofilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或jsp页面关联,则servlet或jsp页面被激活。
	}
	public void init(filterconfig filterconfig) throws servletexception {
	}
}

html

<filter>
<filter-name>authfilter</filter-name>
<filter-class>com.drp.util.filter.authfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authfilter</filter-name>
<url-pattern>*.jsp</url-pattern>//表示对所有jsp文件有效
</filter-mapping>

总结

以上就是本文关于java中filter用法完整代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网