`
neeleon
  • 浏览: 185926 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

四个有用的Java过滤器收藏

    博客分类:
  • 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.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());
}
}
}
}
 

三、字符编码的过滤器
i

mport 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-文档

    本项目旨在设计和实现一个基于协同过滤算法的电影推荐系统。通过上述技术的选择和技术栈的搭建,不仅能够有效管理大量的电影信息和用户数据,还能提供个性化的电影推荐服务。此外,系统采用了B/S架构和MVC架构,使得...

    精品资料(2021-2022收藏)JAVA+android-.pdf

    - 过滤器和监听器增强了Web应用的功能,如登录验证、日志记录等。 8. **Web前端技术**: - HTML、CSS、JavaScript是构建网页的基础,DreamWeaver是前端开发工具。 - AJAX(Asynchronous JavaScript and XML)...

    Java开源的下一代社区平台Symphony.zip

    万能的 GitHub 上连个能用的 Java 社区系统都找不到,Sym 填补了这个宇宙级空白 做最 NB 的开源社区系统,预计几年以后 82% 的社区都将是 Sym 搭建的 作者技痒,炫技之作,Ruby/Python/Node.js/(特别是)PHP ...

    spring2.5.4+hibernate3.2.6+struts2+jbpm3.2.2收藏

    在这个场景中,我们讨论的是如何将Spring 2.5.4、Hibernate 3.2.6、Struts2以及jbpm 3.2.2这四个组件集成到一个项目中。下面将分别介绍这些组件以及它们在整合过程中的配置细节。 1. **Spring 2.5.4**: Spring 是...

    springboot493基于java的美食信息推荐系统的设计与实现pf.zip

    本项目以"springboot493"为核心技术,结合Java编程语言,构建了一个高效、易用的美食信息推荐系统,旨在提升用户体验,增加用户粘性。 一、技术栈介绍 1. SpringBoot:SpringBoot是Spring框架的简化版,它简化了...

    基于协同过滤算法的东北特产销售系统的实现论文

    1. **系统架构**:系统采用了典型的MVC(Model-View-Controller)架构模式,将模型、视图和控制器三个部分分离,使得各个组件之间职责明确,易于维护和扩展。 2. **前端界面**:前端使用HTML、CSS和JavaScript等技术...

    osgi总结文档收藏

    在OSGi环境中,每个组件都是一个独立的模块,有自己的类加载器,可以单独安装、卸载、启动和停止,极大地增强了软件的灵活性和可维护性。 一、OSGi基础知识 1. 模块系统:OSGi的基础是它的模块系统,每个模块称为...

    收藏Log4j文档

    3. 日志过滤器:Filter接口可以用于筛选日志信息,实现更精细的控制。 4. 层次结构:Logger之间存在层次关系,子Logger会继承父Logger的配置,但也可以覆盖特定配置。 五、日志性能优化 1. 日志级别控制:合理设置...

    基于Spring的MVC框架设计与实现

    控制层的实现分为主控制器、过滤器、请求辅助类和命令处理类Command四个部分。主控制器作为总体控制类,负责接收和分发用户请求至各部分控制类;过滤器负责请求预处理或后处理工作,如安全检查、日志记录等;请求...

    网际畅游 MyIE 3.0 源代码

    状态栏上设置了四个快捷按钮,依次为脱机浏览,当前窗口使用自动过滤,激活新窗口,简易文本搜集面版。 简易搜集面版。用来暂存文本信息和图片。可拖放文本图片到状态栏按钮或搜集面版 上将文本图片保存起来。...

    2021-2022年收藏的精品资料税务系统大比武信息技术.doc

    这四个对象分别代表全局应用程序、会话、请求和当前页面的范围。 4. **漏洞扫描**:漏洞扫描工具通过TCP/IP协议向远程主机的多个端口发送请求,以探测可能存在的漏洞。 5. **网络拓扑**:网络拓扑描述了网络中节点...

    2021-2022计算机二级等级考试试题及答案No.16601.docx

    这四个域对象分别代表了不同的作用范围:pageContext 只在当前页面有效,request 在一次请求内有效,session 在用户会话期间有效,application 在整个应用程序生命周期内有效。 2. 表达式 4+5 \ 6* 7 / 8 Mod 9 的...

    J2EE编程技巧大全

    在IT行业中,Java Enterprise Edition(J2EE)是企业级应用开发的重要平台,它提供了丰富的功能和服务,使得开发者能够构建可扩展、安全且...这份"J2EE编程技巧集锦"是宝贵的参考资料,值得每个J2EE开发者收藏和研读。

    基于ssm的微信小程序二手图书交易系统源码数据库.zip

    综上,这个项目不仅涵盖了Java后端开发、微信小程序前端设计,还涉及到数据库设计、安全策略以及性能优化等多个方面的知识,是学习和实践SSM、SpringBoot以及微信小程序开发的宝贵资源。通过该项目,开发者可以深入...

    understand 的使用说明书

    - **实体过滤器**:用于筛选显示特定类型的实体(如函数、类等)。 - **实体定位器**:快速查找特定实体。 - **即时搜索**:快速定位代码中的特定文本或模式。 - **文件查找**:在项目中搜索特定文件或字符串。 ...

    微信小程序在线阅读系统微信小程序源码数据库.doc

    - **功能实现**:集成搜索、收藏、评论等功能,提供个性化推荐机制。 ##### 3. 后端服务 - **接口设计**:根据小程序的需求设计RESTful API,实现前后端分离。 - **数据处理**:使用Spring Boot搭建服务端,结合...

    struts2牛人分享PPT

    - **web.xml**:Web应用程序的核心配置文件,定义了Struts2的核心过滤器和其他Web应用的初始化参数。 - **FilterDispatcher**:定义了Struts2的核心控制器`FilterDispatcher`,负责拦截所有的用户请求,并根据配置...

    基于ssm个性化美食推荐系统.zip

    本系统以Spring、SpringMVC、MyBatis(简称SSM)框架为基础,构建了一个强大的个性化美食推荐系统。下面将详细介绍该系统的架构设计、核心技术和实现流程。 一、系统架构设计 1.1 技术选型:SSM框架是Java企业级...

    光影娱乐带后台毕业设计—(包含完整源码可运行).zip

    光影娱乐后台毕业设计是一个以娱乐为主题的项目,涵盖了前端用户界面以及后台管理系统,为用户提供一个集休闲、互动于一体的在线平台。这个项目可能包含了多种技术栈,如前端开发、后端服务、数据库管理等,旨在帮助...

Global site tag (gtag.js) - Google Analytics