Java中filter用法完整代碼示例
本文研究的主要是Java中filter過(guò)濾器的相關(guān)用法,具體實(shí)現(xiàn)代碼如下。
filter過(guò)濾器主要使用于前臺(tái)向后臺(tái)傳遞數(shù)據(jù)是的過(guò)濾操作。程度很簡(jiǎn)單就不說(shuō)明了,直接給幾個(gè)已經(jīng)寫(xiě)好的代碼:
一、使瀏覽器不緩存頁(yè)面的過(guò)濾器
import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 用于的使 Browser 不緩存頁(yè)面的過(guò)濾器 */ 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 { } }
二、檢測(cè)用戶是否登陸的過(guò)濾器
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()); } } } }
三、字符編碼的過(guò)濾器
import javax.servlet.*; import java.io.IOException; /** * 用于設(shè)置 HTTP 請(qǐng)求字符編碼的過(guò)濾器,通過(guò)過(guò)濾器參數(shù)encoding指明使用何種字符編碼,用于處理Html Form請(qǐng)求參數(shù)的中文問(wèn)題 */ 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"); } }
四、記錄用戶的訪問(wèn)操作器
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 { //記錄用戶的訪問(wèn)操作 HttpServletRequest request1 = (HttpServletRequest)request; StringBuffer url = request1.getRequestURL(); //對(duì)url進(jìn)行過(guò)濾,如果是js/css/image則不進(jìn)行處理 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); } //保存到數(shù)據(jù)庫(kù)中 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){ //將報(bào)表任務(wù)數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中 Connection conn = null; Statement st = null; try { //構(gòu)造sql表達(dá)式,將數(shù)據(jù)插入數(shù)據(jù)庫(kù) 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防止用戶訪問(wèn)一些未被授權(quán)的資源
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方法的第一個(gè)參數(shù)為ServletRequest對(duì)象。此對(duì)象給過(guò)濾器提供了對(duì)進(jìn)入的信息(包括表單數(shù)據(jù)、cookie和HTTP請(qǐng)求頭)的完全訪問(wèn)。第二個(gè)參數(shù)為ServletResponse,通常在簡(jiǎn)單的過(guò)濾器中忽略此參數(shù)。最后一個(gè)參數(shù)為FilterChain,此參數(shù)用來(lái)調(diào)用servlet或JSP頁(yè)。 HttpServletRequest request = (HttpServletRequest)servletRequest; //;//如果處理HTTP請(qǐng)求,并且需要訪問(wèn)諸如getHeader或getCookies等在ServletRequest中無(wú)法得到的方法,就要把此request對(duì)象構(gòu)造成HttpServletRequest HttpServletResponse response = (HttpServletResponse)servletResponse。 String currentURL = request.getRequestURI(); //取得根目錄所對(duì)應(yīng)的絕對(duì)路徑: String targetURL = currentURL.substring(currentURL.indexOf("/", 1), currentURL.length()); //截取到當(dāng)前文件名用于比較 HttpSession session = request.getSession(false); if (!"/login.jsp".equals(targetURL)) { //判斷當(dāng)前頁(yè)是否是重定向以后的登錄頁(yè)面頁(yè)面,如果是就不做session的判斷,防止出現(xiàn)死循環(huán) if (session == null || session.getAttribute("user") == null) { //*用戶登錄以后需手動(dòng)添加session System.out.println("request.getContextPath()=" + request.getContextPath()); response.sendRedirect(request.getContextPath() + "/login.jsp"); //如果session為空表示用戶沒(méi)有登錄就重定向到login.jsp頁(yè)面 return; } } //加入filter鏈繼續(xù)向下執(zhí)行 filterChain.doFilter(request, response); //.調(diào)用FilterChain對(duì)象的doFilter方法。Filter接口的doFilter方法取一個(gè)FilterChain對(duì)象作為它的一個(gè)參數(shù)。在調(diào)用此對(duì)象的doFilter方法時(shí),激活下一個(gè)相關(guān)的過(guò)濾器。如果沒(méi)有另一個(gè)過(guò)濾器與servlet或JSP頁(yè)面關(guān)聯(lián),則servlet或JSP頁(yè)面被激活。 } 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>//表示對(duì)所有jsp文件有效 </filter-mapping>
總結(jié)
以上就是本文關(guān)于Java中filter用法完整代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
- java使用Filter實(shí)現(xiàn)自動(dòng)登錄的方法
- java中使用Filter控制用戶登錄權(quán)限具體實(shí)例
- Java中過(guò)濾器 (Filter) 和 攔截器 (Interceptor)的使用
- 使用JAVA8 filter對(duì)List多條件篩選的實(shí)現(xiàn)
- java過(guò)濾器中Filter的ChainFilter過(guò)濾鏈
- 解決java執(zhí)行cmd命令調(diào)用ffmpeg報(bào)錯(cuò)Concat error - No such filter ''[0,0]''問(wèn)題
- Java使用FilenameFilter查找出目錄下指定后綴的文件示例
- JAVA通過(guò)Filter實(shí)現(xiàn)允許服務(wù)跨域請(qǐng)求的方法
- Java 使用Filter實(shí)現(xiàn)用戶自動(dòng)登陸
相關(guān)文章
MyBatis實(shí)現(xiàn)表連接查詢寫(xiě)法(三種對(duì)應(yīng)關(guān)系)的方法總結(jié)
這篇文章主要介紹了MyBatis實(shí)現(xiàn)表連接查詢寫(xiě)法(一對(duì)一關(guān)系、一對(duì)多關(guān)系、多對(duì)多關(guān)系)的方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-01-01java Servlet 實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼圖片示例
這篇文章主要介紹了java Servlet 實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼圖片示例的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-02-02JAVA String.valueOf()方法的用法說(shuō)明
這篇文章主要介紹了JAVA String.valueOf()方法的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09SpringBoot修改子模塊Module的jdk版本的方法 附修改原因
這篇文章主要介紹了SpringBoot修改子模塊Module的jdk版本的方法 附修改原因,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04使用SSM+Layui+Bootstrap實(shí)現(xiàn)汽車維保系統(tǒng)的示例代碼
本文主要實(shí)現(xiàn)對(duì)汽車維修廠的信息化管理功能,。實(shí)現(xiàn)的主要功能包含用戶管理、配置管理、汽車管理、故障管理、供應(yīng)商管理、配件管理、維修訂單管理、統(tǒng)計(jì)信息、公告管理、個(gè)人信息管理,感興趣的可以了解一下2021-12-12