一、使浏览器不缓存页面的过滤器
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());
}
}
}
}
三、字符编码的过滤器
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 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,不然过滤器也起不了作用。
分享到:
相关推荐
这里我们关注的是五个有用的Java过滤器,它们分别是:使浏览器不缓存页面的过滤器和检测用户是否登录的过滤器。 首先,我们来看第一个过滤器——`ForceNoCacheFilter`。这个过滤器的主要作用是防止浏览器缓存页面...
下面我们将详细介绍五个有用的过滤器,每个过滤器都有其特定的作用和实现方式。 一、使浏览器不缓存页面的过滤器 这个过滤器的作用是使浏览器不缓存页面,从而确保每次访问页面时都可以获取最新的内容。实现这个...
在现代软件开发过程中,特别是Web应用程序中,为了实现灵活高效的业务逻辑处理及控制流管理,常常会使用到两种设计模式:拦截器(Interceptor)与过滤器(Filter)。这两种技术虽然在功能上有一定的相似之处,但其...
### 六个有用的Java过滤器知识点详解 在Java Web开发中,过滤器(Filter)是一种非常重要的技术,它能够对用户的请求和响应进行预处理或后处理,从而实现各种功能需求,例如设置缓存策略、登录验证、字符编码转换等...
下面将详细讲解Java中五种常用的过滤器及其应用场景。 1. **使浏览器不缓存页面的过滤器** 这种过滤器主要用于防止浏览器对Web页面进行缓存,确保每次请求都能获取最新的内容。`ForceNoCacheFilter` 实现了 `javax...
在Web应用开发中,过滤器(Filter)是一种重要的组件,它能够动态地拦截客户端请求和服务器响应,在请求到达目标资源(如Servlet或JSP页面)之前进行预处理,或者在响应返回客户端之前进行后处理。本篇文章将详细...
在Vue中,过滤器(Filters)是一种特殊的函数,主要用于一些文本格式化的任务。Vue 2.x版本中的过滤器可以用于插值表达式和v-bind表达式中,用于文本格式化。过滤器也可以用在组件内或全局定义。 一、过滤器的使用...
C++ 数据结构之布隆过滤器 ...布隆过滤器是一种非常有用的数据结构,可以用于解决大规模数据集合中的元素检索问题。它的优点是空间效率和查询时间都远远超过一般的算法,但缺点是有一定的误识别率和删除错误。
**过滤器**是Django模板语言中用于修改变量值的一种机制。它可以用于对字符串、日期等类型的变量进行处理,以便更好地展示给用户。过滤器通常用管道符号“|”来表示,并且可以串联使用多个过滤器,每个过滤器的输出...
### ADO.NET中的视图(DataView)和过滤器 #### 一、概述 在ADO.NET框架中,`DataView`是一种强大的工具,用于提供对`DataTable`数据的自定义视图,包括过滤、排序和搜索等功能。这对于在不改变原始数据的情况下对...
ASP.NET过滤器是一种非常有用的机制,它允许开发者在请求处理的各个阶段插入自定义的行为。这类似于Java Web开发中的过滤器(filter),可以在请求到达控制器之前或者响应返回客户端之后执行一些预处理或后处理任务。...
在给定的标题和描述中,提到了五个主要的过滤器:`first`, `last`, `not`, `even`, 和 `odd`。下面我们将逐一探讨这些过滤器的使用方法和应用场景。 1. **`first` 过滤器**: `first` 过滤器用于选取匹配元素集中...
使用GraphEdit工具可以图形化地查看和调试过滤器图,这对于查找和解决错误非常有用。完成编码后,运行程序进行测试,观察播放效果和性能。 六、进阶学习 了解DirectShow的更多高级特性,如: - 动态过滤器图调整:...
过滤器分为四种类型:Pre(前置过滤器)、Route(路由过滤器)、Post(后置过滤器)和Error(错误过滤器)。 **二、Zuul的配置与启动** 1. **添加依赖**:在Spring Boot项目中,我们需要在pom.xml文件中引入Spring...
FilterGraph包含以下几种类型的过滤器: - **源过滤器**: 负责获取媒体数据。 - **转换过滤器**: 对数据进行转换或处理。 - **渲染过滤器**: 负责最终的呈现工作。 **1.5 构建一个FILTERGRAPH图** 构建Filter...
ngAgile.js,作为一个强大的JavaScript模块,专注于为AngularJS框架提供丰富的功能,包括角度指令、过滤器、表单验证和工厂等,是提升Web应用开发效率的重要工具。这个模块旨在简化前端开发流程,增强用户体验,并...