Java中filter用法完整代码示例

这篇文章主要介绍了Java中filter用法完整代码示例,分享了浏览器不缓存页面的过滤器,检测用户是否登陆的过滤器等相关实例,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下

本文研究的主要是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; //表示操作成功 } }

ObserveFiltercom.qwserv.itm.pfl.log.svr.ObserveFilterObserveFilter/*

五.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

AuthFiltercom.drp.util.filter.AuthFilterauthFilter*.jsp//表示对所有jsp文件有效

总结

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

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...