`
iorit2003
  • 浏览: 141709 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

过滤器大全

    博客分类:
  • j2ee
阅读更多
一、字符编码的过滤器
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");

}
}

二、使浏览器不缓存页面的过滤器
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;

/** *//**
* 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面


* 配置参数


* checkSessionKey 需检查的在 Session 中保存的关键字

* redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath

* notCheckURLList 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath

*/
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());
}
}
}
}

四、资源保护过滤器
package catalog.view.util;

import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
//
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/** *//**
* This Filter class handle the security of the application.
*
* It should be configured inside the web.xml.
*
* @author Derek Y. Shen
*/
public class SecurityFilter implements Filter {
//the login page uri
private static final String LOGIN_PAGE_URI = "login.jsf";

//the logger object
private Log logger = LogFactory.getLog(this.getClass());

//a set of restricted resources
private Set restrictedResources;

/** *//**
* Initializes the Filter.
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.restrictedResources = new HashSet();
this.restrictedResources.add("/createProduct.jsf");
this.restrictedResources.add("/editProduct.jsf");
this.restrictedResources.add("/productList.jsf");
}

/** *//**
* Standard doFilter object.
*/
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
this.logger.debug("doFilter");

String contextPath = ((HttpServletRequest)req).getContextPath();
String requestUri = ((HttpServletRequest)req).getRequestURI();

this.logger.debug("contextPath = " + contextPath);
this.logger.debug("requestUri = " + requestUri);

if (this.contains(requestUri, contextPath) && !this.authorize((HttpServletRequest)req)) {
this.logger.debug("authorization failed");
((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req, res);
}
else {
this.logger.debug("authorization succeeded");
chain.doFilter(req, res);
}
}

public void destroy() {}

private boolean contains(String value, String contextPath) {
Iterator ite = this.restrictedResources.iterator();

while (ite.hasNext()) {
String restrictedResource = (String)ite.next();

if ((contextPath + restrictedResource).equalsIgnoreCase(value)) {
return true;
}
}

return false;
}

private boolean authorize(HttpServletRequest req) {

//处理用户登录
/**//* UserBean user = (UserBean)req.getSession().getAttribute(BeanNames.USER_BEAN);

if (user != null && user.getLoggedIn()) {
//user logged in
return true;
}
else {
return false;
}*/
}
}

五 利用Filter限制用户浏览权限

在一个系统中通常有多个权限的用户。不同权限用户的可以浏览不同的页面。使用Filter进行判断不仅省下了代码量,而且如果要更改的话只需要在Filter文件里动下就可以。
以下是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;

public class RightFilter implements Filter {

public void destroy() {

}

public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain arg2) throws IOException, ServletException {
// 获取uri地址
HttpServletRequest request=(HttpServletRequest)sreq;
String uri = request.getRequestURI();
String ctx=request.getContextPath();
uri = uri.substring(ctx.length());
//判断admin级别网页的浏览权限
if(uri.startsWith("/admin")) {
if(request.getSession().getAttribute("admin")==null) {
request.setAttribute("message","您没有这个权限");
request.getRequestDispatcher("/login.jsp").forward(sreq,sres);
return;
}
}
//判断manage级别网页的浏览权限
if(uri.startsWith("/manage")) {
//这里省去
}
}
//下面还可以添加其他的用户权限,省去。

}

public void init(FilterConfig arg0) throws ServletException {

}

}

<!-- 判断页面的访问权限 -->
<filter>
<filter-name>RightFilter</filter-name>
<filter-class>cn.itkui.filter.RightFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RightFilter</filter-name>
<url-pattern>/admin/**//*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>RightFilter</filter-name>
<url-pattern>/manage/*</url-pattern>
</filter-mapping>

在web.xml中加入Filter的配置,如下:
<filter>

<filter-name>EncodingAndCacheflush</filter-name>
<filter-class>EncodingAndCacheflush</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingAndCacheflush</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

要传递参数的时候最好使用form进行传参,如果使用链接的话当中文字符的时候过滤器转码是不会起作用的,还有就是页面上

form的method也要设置为post,不然过滤器也起不了作用。
分享到:
评论

相关推荐

    Servlet过滤器大全

    ### Servlet过滤器大全 在Java Web开发中,Servlet过滤器是一种非常重要的机制,它可以在请求到达目标资源(如Servlet或JSP页面)之前或者响应返回客户端之前进行预处理或后处理。下面详细介绍几种常见的Servlet...

    servlet 过滤器大全

    ### Servlet过滤器详解 #### 一、字符编码过滤器 在Web开发中,尤其是在处理中文等多语言环境时,字符编码的问题尤为重要。如果字符编码设置不当,可能会导致页面出现乱码。为此,开发者通常会使用字符编码过滤器...

    过滤器图形符号(标准图形)

    ### 过滤器图形符号(标准图形) #### 知识点概述 在设计与工程技术领域,标准化图形符号的使用能够确保信息的有效传达与统一理解。《过滤器图形符号(标准图形)》一文介绍了几种常用的过滤器图形符号,这些符号...

    spring过滤器大全 代码

    FilterChainProxy会按顺序来调用这些filter,使这些filter能享用Spring Ioc的功能, CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 定义url比较前先转为小写 PATTERN_TYPE_APACHE_ANT 定义使用Apache ant的匹配模式

    wireshark捕获过滤器与显示过滤器

    ### Wireshark捕获过滤器与显示过滤器详解 #### 捕获过滤器与显示过滤器概述 在使用Wireshark进行网络分析时,如何有效地筛选出关注的数据包至关重要。由于Wireshark能够捕获大量的网络数据,如果没有合适的过滤...

    Spring 各种过滤器配置大全

    FilterChainProxy会按顺序来调用这些filter,使这些filter能享用Spring Ioc的功能, CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 定义url比较前先转为小写 PATTERN_TYPE_APACHE_ANT 定义使用Apache ant的匹配模式

    java中需要用到的各种过滤器

    ### Java中需要用到的各种过滤器知识点 #### 一、概述 在Java Web开发中,过滤器(Filter)是一种非常重要的机制,它可以对用户请求和服务器响应进行预处理或后处理,从而实现诸如编码设置、权限控制、登录验证等...

    5个Servlet过滤器实例源码(JSP)

    Servlet过滤器大全,各种详细使用的代码! 一、字符编码的过滤器 二、使浏览器不缓存页面的过滤器 三、检测用户是否登陆的过滤器 四、资源保护过滤器 五 利用Filter限制用户浏览权限

    敏感词过滤器(富含3000词汇)

    在IT行业中,敏感词过滤器是一种常见的工具,用于在文本数据处理中筛查并阻止或替换可能引起不适或违反规定的词汇。这个压缩包“敏感词过滤器(富含3000词汇)”似乎提供了一个这样的解决方案,它包含了3000个可能被...

    bloom filter布隆过滤器学习资料大全

    这个压缩包文件“bloom filter布隆过滤器学习资料大全”显然是一个关于布隆过滤器的资源集合,包含了相关的论文和变种总结,对于学习和理解这一技术非常有帮助。 布隆过滤器的核心思想是通过多个哈希函数将元素映射...

    机械过滤器的选型和机械过滤器的原理.pdf

    机械过滤器,也被称为压力过滤器,是水处理系统中不可或缺的一部分,主要用于纯水制备的前期预处理。这类设备可以有效地去除水中的悬浮物、固体颗粒以及部分有机物,提高水质,使其达到饮用水的标准。根据不同的应用...

    论坛不良词语过滤大全

    3. **模糊匹配**:考虑到拼写错误或故意篡改,过滤器可能会使用模糊匹配技术,如Levenshtein距离,即使用户稍作修改,也能识别出不良词语。 4. **动态更新**:随着时间推移,新的不良词汇可能出现,因此管理系统...

    web资料桌面

    2. `Servlet过滤器大全.doc`:这份文档可能全面介绍了Servlet过滤器的概念、工作原理以及各种使用场景,是深入理解服务器端编程的关键。 3. `Servlet过滤器介绍之原理分析.doc`:可能更侧重于Servlet过滤器的工作...

    wireshark过滤器-抓包教程大全!

    2. **过滤器**:Wireshark提供了丰富的过滤器功能,帮助用户快速定位和分析感兴趣的流量。过滤器分为多个层级,包括以太网、IP、传输层和应用层过滤。 - **以太网过滤器**:如`eth.addr`用于匹配MAC地址,`eth....

    jquery分类图片过滤器插件代码

    【jQuery 分类图片过滤器插件】是一种基于JavaScript库jQuery实现的动态图片筛选工具,它允许用户根据不同的分类条件快速浏览和筛选图片。这个插件主要用于提升网页中展示大量图片时的用户体验,使得用户能够方便地...

    jQuery选项卡切换过滤器帅选图片浏览

    "jQuery选项卡切换过滤器帅选图片浏览"是一个利用jQuery实现的功能,通常用于创建交互式和动态的网页内容展示,特别是在图片浏览场景中。这个功能结合了选项卡切换和过滤器的概念,使用户能够更方便地浏览和筛选图片...

    543个thor规则_thor规则_thor_Thor过滤器_543个thor_543个thor规则_

    THOR过滤器是该框架的核心组成部分,它包含了多个平台的过滤规则,用于识别和阻止可能的恶意活动。这些规则根据不同的网络环境、应用平台以及已知的威胁模式进行设计和优化,确保对各种类型的网络流量进行有效的筛选...

    my-four.rar_four

    7. **Servlet过滤器大全.doc**:Servlet是Java Web开发的一部分,过滤器允许在请求处理前进行预处理,响应发送后进行后处理。文档可能详细讲解了如何配置和使用Servlet过滤器。 8. **JSTL详解.doc**:JSP标准标签库...

    活性炭过滤器技术方案.pdf

    【活性炭过滤器技术方案】 活性炭过滤器是一种广泛应用在水处理领域的设备,主要用于去除水中的污染物,如氯、油、色度和异味等。本技术方案由宜兴市华通环保设备有限公司提供,针对30t/h的处理能力设计,旨在确保...

Global site tag (gtag.js) - Google Analytics