java中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 { } }
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.List; import java.util.ArrayList; import java.util.StringTokenizer; import java.io.IOException; /** * 用於檢測使用者是否登陸的過濾器,如果未登入,則重定向到指的登入頁面<p> * 配置引數<p> * checkSessionKey 需檢查的在 Session 中儲存的關鍵字<br/> * redirectURL 如果使用者未登入,則重定向到指定的頁面,URL不包括 ContextPath<br/> * notCheckURLList 不做檢查的URL列表,以分號分開,並且 URL 中不包括 ContextPath<br/> */ 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 cn.stone.model;
import java.io.IOException;
import java.text.SimpleDateFormat;
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;
public class ObserveFilter implements Filter {
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 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; // 表示操作成功
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
五.Filter防止使用者訪問一些未被授權的資源
package cn.stone.model;
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 {
}
}
相關推薦
java中Filter的用法
一、使瀏覽器不快取頁面的過濾器 import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 用於的使 Browser 不
Java中Iterator用法整理
mil rem println 對象 獲得 返回 new ext 插入 叠代器(Iterator) 叠代器是一種設計模式,它是一個對象,它可以遍歷並選擇序列中的對象,而開發人員不需要了解該序列的底層結構。叠代器通常被稱為“輕量級”對象,因為創建它的代價小。 Java
Java中vector用法整理
遍歷 檢索 集合 ash ets toa java code lan ArrayList會比Vector快,他是非同步的,如果設計涉及到多線程,還是用Vector比較好一些 import java.util.*; /** * 演示Vector的使用。包括Vector的創
【本地資源路徑&&網絡資源路徑&&正反斜杠在Java中的用法】
mage pow cnblogs 環境 而在 來看 pan 開始 命令行 一、概念和用法 左正右反 先來看看轉義字符的概念:通過 \ ,?來轉變後面字母或符號的含義。意思就是改變字母本身的含義。 以"\"符號為例,JAVA中有很多操作,例如文件操作等,需要用到路徑這個東
Java中compareTo用法及原始碼解析
最近遇到一個問題,在日期比較的時候,很麻煩,因為日期比較沒有大於等於,只有大於或者小於,這就導致在比較時間的時候特別麻煩,而且還要由string轉成date格式才能比較,下面是我使用compareTo比較時間字串的程式碼: String putStartTime = Date
Java中SimpleDateFormat用法詳解
轉自:http://blog.csdn.net/linbooooo1987/article/details/7540999 [java] view plain copy
java中json用法整理
阿里家的json 日常開發中遇到各種json,感覺用的比較亂,在這裡先著重整理一下阿里家的json用法。 Step1:maven配置 <dependency> <groupId>com.alibaba</groupId>
java中Filter過濾器處理中文亂碼的方法
注意問題:在學習用selvert的過濾器filter處理中文亂碼時,在filter配置初始化時用了utf-8處理中文亂碼,而在提交的jsp頁面中卻用了gbk。雖然兩種都可以出來中文亂碼,但是卻造成了處理亂碼的格式不一致。所以編譯出錯。 解決方法:所有地方都用ut
java中this用法總結
1,當局部變數和成員變數重名的時候,在方法中使用this表示成員變數以示區分。 class Demo{ String str = "這是成員變數"; void fun(String str){ System.out.println(str);
java中BigInteger用法
1.賦值: BigInteger a=new BigInteger("1"); BigInteger b=BigInteger.valueOf(1); 2.運算: ① add(); 大整數相加 BigInteger a=new BigInteger(“23”); 
詳解Java中Map用法
Map以按鍵/數值對的形式儲存資料,這裡要特別說明( Map.Entry,是Map的內部類,它用來描述Map中的鍵/值對)。 Map是一個介面,我們平時多用它的實現類HashMap。 用例如下: 1 public static void main(String args
this在java中的用法
this在java中的用法 1.使用this關鍵字引用成員變數 作用:解決成員變數與引數或區域性變數命名衝突的問題 public class Dog { String name; public Dog(String name) { this.name = name;
java中ArrayList用法詳解,基本用法(含增刪改查)
1、什麼是ArrayList ArrayList就是動態陣列,它提供了①動態的增加和減少元素 ②實現了ICollection和IList介面 ③靈活的設定陣列的大小ArrayList是一個其容量能夠動態增長的動態陣列。它繼承了AbstractList,實現了List、Rand
java中QueryRunner用法(增、刪、改、查詳解)
1.匯入相應的JARs MySQL驅動jar包:mysql-connector-Java-5.1.28-bin.jar C3P0需要的jar包:c3p0-0.9.2-pre1.jar和mchange-commons-0.2.jar 2.在src下新增C3P0配置
Java中return用法.
對於return的用法看的不是特別明白,先記著,有空再說。。。 Java中的return語句總是和方法有密切關係,return語句總是用在方法中,有兩個作用,一個是返回方法指定型別的值(這個值總是確定的),一個是結束方法的執行(僅僅一個return語句)。 以下是無
Java中compareTo用法
Java中的compareto方法,返回參與比較的前後兩個字串的asc碼的差值 String a = "a"; String b = "b"; System.out.println(a.compareTo(b)); 輸出值-1 1 2 3 4 5 String a = "
JAVA中String 用法
1,獲取 1.1:字串中包含的字元數,也就是字串的長度。 int length():獲取長度 1.2:根據位置獲取位置上某個字元。 char charAt(int index) 1.3:根據字元獲取該字元在字串中的位置。 int i
java中static用法理解
static關鍵字1.修飾成員變數在我們平時的使用當中,static最常用的功能就是修飾類的屬性和方法,讓他們成為類的成員屬性和方法,我們通常將用static修飾的成員稱為類成員或者靜態成員,這句話挺起來都點奇怪,其實這是相對於物件的屬性和方法來說的。請看下面的例子:(未避免程式太過臃腫,暫時不管訪問控制)p
static在java中的用法
static表示“全域性”或者“靜態”的意思,用來修飾成員變數和成員方法,也可以形成靜態static程式碼塊,但是Java語言中沒有全域性變數的概念。 被static修飾的成員變數和成員方法獨立於該類的任何物件。也就是說,它不依賴類特定的例項,被類的所有例項共享。 只要這個
java中 .split( )用法
print rgs 福建 河北 sta 新疆 陜西 方法 雲南 創建main方法: public class StrTest { public static void main(String[] args) { String str = "北京,天津,上海,重慶,