您的位置:首页 > 编程语言 > Java开发

java中filter的用法

2013-06-25 13:59 246 查看
filter过滤器主要使用于前台向后台传递数据是的过滤操作。程度很简单就不说明了,直接给几个已经写好的代码:
一、使浏览器不缓存页面的过滤器

Java代码
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 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; //表示操作成功

}

}

<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防止用户访问一些未被授权的资源

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 {

}
}

<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: