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;

//表示操作成功

}

}

<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 {

}

}

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>

总结

以上是 Java中filter用法完整代码示例 的全部内容, 来源链接: utcz.com/z/355438.html

回到顶部