您的位置:首页 > 其它

Web项目配置字符过滤器

2018-03-05 09:31 260 查看

一、Dynamic Web Project项目,其web.xml中配置字符过滤器

1.直接使用Spring MVC 提供的实现类org.springframework.web.filter.CharacterEncodingFilter【spring-web-3.2.1.RELEASE.jar中】<filter>
<description>字符集过滤器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description>字符集编码</description>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.自定义字符过滤器EncodingFilterpackage cn.sh.sstic.smet.comm.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;

public class EncodingFilter implements Filter {
private String charset = "UTF-8";

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
request.setCharacterEncoding(this.charset);
chain.doFilter(request, response);
}

public void init(FilterConfig arg0) {
this.charset = arg0.getInitParameter("charset");
}

@Override
public void destroy() {
// TODO Auto-generated method stub

}
}在web.xm中配置过滤器:<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>cn.sh.sstic.smet.comm.filter.EncodingFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

二、自定义session过滤器【检查用户是否登录】

package cn.sh.sstic.smet.comm.filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

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 org.apache.log4j.Logger;

import cn.sh.sstic.tesc.model.TescUser;

public class SessionFilter implements Filter {

private Logger log = Logger.getLogger(SessionFilter.class);

private String redirectURL = "";

private List<String> ignoreList = new ArrayList<String>();

public void destroy() {
// TODO Auto-generated method stub
}

public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

boolean ignore = false;

// 检查当前请求是否是登录请求,或者是需要忽略的请求
String requestURI = request.getRequestURI();

if(requestURI.contains("login.do"))
ignore = true;
if(requestURI.contains("doLogin.do"))
ignore = true;
if(requestURI.contains("doGetPassword.do"))
ignore = true;
if(requestURI.contains("doRegist.do"))
ignore = true;
if(requestURI.contains("doRegister.do"))
ignore = true;
if(requestURI.contains("ajaxYZ.do"))
ignore = true;
if(requestURI.contains("ajaxYZ2.do"))
ignore = true;
if(requestURI.contains("ajaxProUndertake.do"))
ignore = true;
if (requestURI.contains(this.redirectURL)) {
ignore = true;
} else {
for (String ignoreURI : ignoreList) {
if (requestURI.endsWith(ignoreURI)) {
ignore = true;
break;
}
}
}

if (!ignore) {
TescUser tescUser = (TescUser)request.getSession().getAttribute("USERINFO");
if (tescUser == null) {
log.info("session会话超时,重定向登录页面");
response.sendRedirect(request.getContextPath() + this.redirectURL); // 重定向登录页面
return;
}
}

chain.doFilter(req, res);
}

public void init(FilterConfig config) throws ServletException {
this.redirectURL = config.getInitParameter("redirectURL");
Enumeration<String> e = config.getInitParameterNames();
while(e.hasMoreElements()) {
String paramKey = e.nextElement();
if (paramKey.indexOf("ignoreURL") != -1) {
String ignoreURL = config.getInitParameter(paramKey);
this.ignoreList.add(ignoreURL);
}
}
}
}

二、过滤器介绍

Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

javax.servlet.Filter【servlet-api-2.5.jar】,其源码如下:package javax.servlet;

import java.io.IOException;

public abstract interface Filter
{
public abstract void init(FilterConfig paramFilterConfig)
throws ServletException;

public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain)
throws IOException, ServletException;

public abstract void destroy();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐