Java中filter用法完整代码示例
本文研究的主要是Java中filter过滤器的相关用法,具体实现代码如下。
filter过滤器主要使用于前台向后台传递数据是的过滤操作。程度很简单就不说明了,直接给几个已经写好的代码:
一、使浏览器不缓存页面的过滤器
importjavax.servlet.*;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
/**
*用于的使Browser不缓存页面的过滤器
*/
publicclassForceNoCacheFilterimplementsFilter{
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainfilterChain)throwsIOException,ServletException
{
((HttpServletResponse)response).setHeader("Cache-Control","no-cache");
((HttpServletResponse)response).setHeader("Pragma","no-cache");
((HttpServletResponse)response).setDateHeader("Expires",-1);
filterChain.doFilter(request,response);
}
publicvoiddestroy()
{
}
publicvoidinit(FilterConfigfilterConfig)throwsServletException
{
}
}
二、检测用户是否登陆的过滤器
publicclassCheckLoginFilterimplementsFilter{
protectedFilterConfigfilterConfig=null;
privateStringredirectURL=null;
privateListnotCheckURLList=newArrayList();
privateStringsessionKey=null;
publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException
{
HttpServletRequestrequest=(HttpServletRequest)servletRequest;
HttpServletResponseresponse=(HttpServletResponse)servletResponse;
HttpSessionsession=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);
}
publicvoiddestroy()
{
notCheckURLList.clear();
}
privatebooleancheckRequestURIIntNotFilterList(HttpServletRequestrequest)
{
Stringuri=request.getServletPath()+(request.getPathInfo()==null?"":request.getPathInfo());
returnnotCheckURLList.contains(uri);
}
publicvoidinit(FilterConfigfilterConfig)throwsServletException
{
this.filterConfig=filterConfig;
redirectURL=filterConfig.getInitParameter("redirectURL");
sessionKey=filterConfig.getInitParameter("checkSessionKey");
StringnotCheckURLListStr=filterConfig.getInitParameter("notCheckURLList");
if(notCheckURLListStr!=null)
{
StringTokenizerst=newStringTokenizer(notCheckURLListStr,";");
notCheckURLList.clear();
while(st.hasMoreTokens())
{
notCheckURLList.add(st.nextToken());
}
}
}
}
三、字符编码的过滤器
importjavax.servlet.*;
importjava.io.IOException;
/**
*用于设置HTTP请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理HtmlForm请求参数的中文问题
*/
publicclassCharacterEncodingFilter
implementsFilter
{
protectedFilterConfigfilterConfig=null;
protectedStringencoding="";
publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException
{
if(encoding!=null)
servletRequest.setCharacterEncoding(encoding);
filterChain.doFilter(servletRequest,servletResponse);
}
publicvoiddestroy()
{
filterConfig=null;
encoding=null;
}
publicvoidinit(FilterConfigfilterConfig)throwsServletException
{
this.filterConfig=filterConfig;
this.encoding=filterConfig.getInitParameter("encoding");
}
}
四、记录用户的访问操作器
packagecom.qwserv.itm.pfl.log.svr;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjava.text.SimpleDateFormat;
importjavax.servlet.http.HttpServletRequest;
importcom.qwserv.itm.api.pfl.sm.vo.Person;
importjava.sql.*;
importcom.qwserv.itm.api.ServiceAccess;
importcom.qwserv.itm.util.toolkit.DebugUtil;
publicclassObserveFilterimplementsFilter{
protectedstaticDebugUtillog=DebugUtil.getInstances("pfl-log",ObserveFilter.class);
publicvoiddestroy(){
}
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,
ServletException{
//记录用户的访问操作
HttpServletRequestrequest1=(HttpServletRequest)request;
StringBufferurl=request1.getRequestURL();
//对url进行过滤,如果是js/css/image则不进行处理
if(judgeFile(url.toString())){
StringoperTime=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").
format(newjava.util.Date());
StringhostIp=request.getRemoteAddr();
StringsessionId=request1.getRequestedSessionId();
StringuserId="";
Personperson=(Person)request1.getSession().getAttribute("userObj");
if(null!=person&&null!=person.getUser()){
userId=person.getUser().getId();
}
StringqueryString=request1.getQueryString();
if(null!=queryString){
url.append('?');
url.append(queryString);
}
//保存到数据库中
saveToDb(userId,hostIp,sessionId,url.toString(),operTime,"");
}
//Passcontrolontothenextfilter
chain.doFilter(request,response);
}
publicvoidinit(FilterConfigfilterConfig)throwsServletException{
}
publicBooleanjudgeFile(Stringurl){
if(url.endsWith(".gif")||url.endsWith(".jpg")||url.endsWith(".png")
||url.endsWith(".bmp")||url.endsWith(".css")||url.endsWith(".js")
||url.endsWith(".jsx")){
returnfalse;
}else{
returntrue;
}
}
publicintsaveToDb(StringuserId,StringhostIp,StringsessionId,Stringurl,
StringoperTime,Stringdesc){
//将报表任务数据保存到数据库中
Connectionconn=null;
Statementst=null;
try{
//构造sql表达式,将数据插入数据库
conn=ServiceAccess.getSystemSupportService().getDefaultConnection();
st=conn.createStatement();
Stringsql="insertintoLOG_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="insertintoLOG_OBSERVE_HISTORY(Id,USERID,URL,Detail,SessionID,HostName,StartDate)values(LOG_OBSERVE_SEQ.nextval,'"+
userId+"','"+url+"','"+desc+"','"+sessionId
+"','"+hostIp+"',TO_DATE('"+operTime
+"','YYYY-MM-DDHH24:MI:SS'))";
}
st.executeUpdate(sql);
}
catch(Exceptione){
e.printStackTrace();
log.error("--------------------TheurlStringis:"+url+"-------------------------------");
return1;
//表示操作失败
}
finally{
if(null!=st)
{
try{
st.close();
}
catch(Exceptione)
{
e.printStackTrace();
}
st=null;
}
if(conn!=null){
try{
conn.close();
}
catch(Exceptione){
e.printStackTrace();
}
conn=null;
}
}
return0;
//表示操作成功
}
}
ObserveFilter com.qwserv.itm.pfl.log.svr.ObserveFilter ObserveFilter /*
五.Filter防止用户访问一些未被授权的资源
packagecom.drp.util.filter;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
publicclassAuthFilterimplementsFilter{
publicvoiddestroy(){
}
publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,
FilterChainfilterChain)throwsIOException,ServletException{
//1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
HttpServletRequestrequest=(HttpServletRequest)servletRequest;
//;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest
HttpServletResponseresponse=(HttpServletResponse)servletResponse。
StringcurrentURL=request.getRequestURI();
//取得根目录所对应的绝对路径:
StringtargetURL=currentURL.substring(currentURL.indexOf("/",1),currentURL.length());
//截取到当前文件名用于比较
HttpSessionsession=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页面被激活。
}
publicvoidinit(FilterConfigfilterConfig)throwsServletException{
}
}
html
AuthFilter com.drp.util.filter.AuthFilter AuthFilter *.jsp //表示对所有jsp文件有效
总结
以上就是本文关于Java中filter用法完整代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!