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

