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;
/**
* 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面
* 配置参数
* 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;
}*/
}
}
一、使浏览器不缓存页面的过滤器
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;
}*/
}
}
发表评论
-
java的日志处理指南
2016-01-14 15:35 1977Java日志基础 Java使用了一种自定义的、可扩展的方法 ... -
javaWeb开发中ServletContext总结
2015-03-19 00:01 1073WEB容器在启动时,它会为每个WEB应用程序都创建一个对应 ... -
java日志组件介绍(common-logging,log4j,slf4j,logback )
2015-03-17 10:12 1010common-logging common-logging ... -
hibernate本地sql(native查询)查询的3种转换方式
2015-03-11 08:51 874在hibernate使用的过程中.我们通常需要对结果进行解释 ... -
hibernate 的查询
2013-12-03 14:58 739QBC (Query By Criteria) 主要有Cri ... -
Linux下jdk安装
2012-02-02 18:04 7461下载需要安装的的jdk文件,放在一个用户指定文件夹中,进 ... -
集群简介(转)
2011-08-26 10:03 852一:集群概念: 1. 两大关键特性 集群是一组协同 ... -
验证码功能的实现
2011-08-08 15:23 928最近,在弄一个微薄类的sns项目,需要用到验证码,记录下。代码 ... -
velocity的使用示例(转)
2011-07-28 11:48 1138不少人看过或了解过Velo ... -
java程序中访问url接口
2011-07-06 10:56 4292在多人开发项目中,我们经常要在自己程序内部调用别人的http ... -
JAVA操作COOKIE的总结
2011-06-10 11:52 12661.设置Cookie Cookie cookie = ... -
Java中cookie和session 1相关应用之2
2011-06-09 15:29 1325十一、session在不同环境下的不同含义 sessio ... -
Java中cookie和session 1相关应用
2011-06-09 15:27 1249一、cookie机制和session机制的区别 具体来 ... -
编写你自己的单点登录(SSO)服务
2011-05-31 20:56 759单点登录(SSO)的技术 ... -
单点登陆(Single Sign On-SSO)
2011-05-31 20:54 1054本文以某新闻单位多媒 ... -
javamail实现登录发送邮件
2011-05-20 16:25 1359[color=darkred][/color]/** ...
相关推荐
本文将详细介绍标题提及的五种常用过滤器,并提供相关实现代码,帮助理解它们的工作原理和用途。 一、使浏览器不缓存页面的过滤器 在Web开发中,有时我们需要确保每次请求都能获取最新的页面内容,防止浏览器缓存...
下面将详细讲解Java中五种常用的过滤器及其应用场景。 1. **使浏览器不缓存页面的过滤器** 这种过滤器主要用于防止浏览器对Web页面进行缓存,确保每次请求都能获取最新的内容。`ForceNoCacheFilter` 实现了 `javax...
在Java编程领域,过滤器(Filters)是一种常用的设计模式,用于处理数据流或请求响应链中的特定任务。根据所提供的标题、描述以及部分模糊的内容,我们可以深入探讨Java中一些常用的过滤器类型及其应用。 ### 1. ...
### 六个有用的Java过滤器知识点详解 在Java Web开发中,过滤器(Filter)是一种非常重要的技术,它能够对用户的请求和响应进行预处理或后处理,从而实现各种功能需求,例如设置缓存策略、登录验证、字符编码转换等...
### Java中需要用到的各种过滤器知识点 #### 一、概述 在Java Web开发中,过滤器(Filter)是一种非常...这些过滤器在实际项目中有着广泛的应用场景,掌握它们的使用方法对于提高系统的功能性和安全性具有重要意义。
这里我们将深入探讨标题中提到的几个常用的过滤器及其源码实现。 首先,我们来看第一个过滤器:防止浏览器缓存页面的过滤器。这个过滤器的主要目的是确保每次用户访问页面时,都能获取到服务器最新更新的内容,而...
Java 过滤器模式(Filter Pattern)是一种常用的设计模式,用于在请求到达目标对象之前或之后,对请求进行处理或过滤。该模式可以用于实现不同的功能,如验证、授权、日志记录、压缩等,将不同的操作当作过滤链中的...
综上所述,"Android 常用格式过滤器(高级版)"这个资源可能涵盖了各种常见的过滤场景和高级用法,可以帮助开发者更加精细地管理用户在EditText中的输入,提升应用的质量和用户体验。通过深入学习和实践,开发者可以...
本文将深入探讨Java环境下使用RSA非对称加密和AES对称加密的方法,以及如何通过过滤器实现入口和出口的统一处理。首先,我们来理解这两种加密算法。 **RSA非对称加密** RSA是一种非对称加密算法,其核心在于一对...
通常,敏感词过滤器会使用字典树(如Trie树)或者关键词列表来存储敏感词,并提供方法来判断一个字符串是否包含敏感词,或者将敏感词替换为星号等其他字符。 `List.java`:这个文件可能是用于存储敏感词列表的数据...
Java过滤器和拦截器是两个常用的Web应用程序组件,它们之间的区别是什么呢?本文将通过实例解析,详细介绍Java过滤器和拦截器的区别,帮助读者更好地理解和应用它们。 1. 使用范围和规范不同 Filter是Servlet规范...
### Servlet 3.0 使用注解标注过滤器 #### 一、Servlet 3.0概述与新特性 Servlet 3.0 是 Java EE 6 的一部分,它引入了许多新的特性和改进,使得开发者能够更方便地开发 Web 应用程序。其中一个重要特性就是支持...
配置文件中,使用`filter { java { jar => "/path/to/your/filter.jar" } }`来加载你的Java过滤器。 7. **测试与调试**: 可以通过Logstash的命令行工具或集成到现有日志处理管道中来测试你的过滤器。如果遇到问题,...
该类导入了多个包,包括 `javax.servlet.*`、`javax.servlet.http.*`、`java.io.*`、`java.util.*` 等,这些都是编写过滤器时常用的包。其中 `javax.servlet.Filter` 是所有过滤器的基接口,必须实现其 `doFilter` ...
总的来说,Servlet验证码制作和过滤器是Java Web开发中重要的安全和功能组件。理解并掌握它们的原理和使用,能帮助我们构建更安全、更高效的Web应用。通过不断地实践和优化,我们可以提升用户体验,同时防范各种潜在...
4. **销毁**:`destroy()`方法在容器卸载过滤器时调用,释放过滤器占用的资源。 #### 使用场景 这种过滤器可以广泛应用于论坛、博客、聊天室等各种Web应用中,用来防止不良信息的传播,提高网站的安全性和用户体验...
可以设置开始和结束行键,过滤器等。 ```java Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result res : scanner) { // 处理每一行结果 } scanner.close(); ``` 6. **...
在这个方法中,可以释放过滤器使用的资源。 Filter 的应用场景 Filter 可以应用于多种场景,例如: * 认证和授权:可以使用 Filter 来实现认证和授权功能,例如检查用户的登录状态和权限。 * 日志记录:可以使用 ...
总结来说,"过滤器--控制不同权限用户访问不同文件夹代码.rar"是一个实用的示例,它展示了如何使用Java Servlet过滤器技术实现精细的权限控制,确保不同权限级别的用户只能访问其被授权的资源。这样的功能对于保护...
通过上述步骤,我们就在ThinkPHP框架中实现了一个简单的类似Java过滤器的功能,可以有效地对控制器进行登录验证,确保了业务逻辑的安全执行。 以上就是ThinkPHP框架实现类似Java过滤器功能的详细解析。更多关于...