博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 开发中用到的几种过滤器
阅读量:7146 次
发布时间:2019-06-29

本文共 8043 字,大约阅读时间需要 26 分钟。

hot3.png

 

在Java中有时会遇见乱码的情况,这里提供了几种转换方法

(一)Java中的编码转换

 

 

(二)可以在web.xml文件中配置的自己写的过滤器

    第一种方法最简单也最方便,但是只能用在少量的地方或是偶尔一两次转码,如果大面积使用就不方便了,也大大增加了编码量,如果你的项目里没有用Spring的框架开发,用web.xml配置自定义过滤器可以一劳永逸的解决 

   

    1.首先要编写自己的过滤器类(实现了javax.servlet.Filter):

    

package fck.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 CodeFilter implements Filter {	public void destroy() {		// TODO Auto-generated method stub	}	public void doFilter(ServletRequest request, ServletResponse response,			FilterChain filter) throws IOException, ServletException {		// TODO Auto-generated method stub			request.setCharacterEncoding("utf-8"); 			filter.doFilter(request, response); 	}	public void init(FilterConfig arg0) throws ServletException {		// TODO Auto-generated method stub	}}

 

    2.在web.xml文件中编写过滤器配置:

    

CodeFilter
fck.filter.CodeFilter
CodeFilter
/*

 

 之后不用再做什么代码的改变,过滤器就将所有的访问都转码了

 

 (三)使浏览器不缓存页面的过滤器

 

 

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 T 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.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限制用户浏览权限

 

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 T 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 {	}}

 

 配置文件写入:

RightFilter
cn.itkui.filter.RightFilter
RightFilter
/admin/**//*
RightFilter
/manage/*

 

 

 

 

 

 

    最简单也是可以少量用的方法就是在java类中使用的编码方式转换

比如在项目中输出String Name;是“&#()@(¥*@”乱码,那么可以采用:

 

String strNew = ""; //转化后的字符串strNew = new String(str.getBytes("iso8859-1"),"utf-8");

 这样得到的strNew就是转换成“utf-8”后的编码

 

转载于:https://my.oschina.net/u/3647620/blog/1552571

你可能感兴趣的文章
yield return 和yield break
查看>>
念念不忘SERVLET
查看>>
L11,one good turn deserves another
查看>>
Code::Blocks设置支持C++ 11
查看>>
韩媒:美驻韩大使要求韩大幅上调防卫费分担额
查看>>
客运压力大 北京地铁4号线、大兴线工作日早高峰将限流
查看>>
中关村硬科技孵化器首次合作建科技成果转化创新平台
查看>>
广州外援斯贝茨被CBA公司停赛4场 罚款10万元
查看>>
福利!给所有需要找工作的小伙伴分享让我印象深刻的的开发面试题(第二部分),朋友们收好哦...
查看>>
React 折腾记 - (5) 记录用React开发项目过程遇到的问题(Webpack4/React16/antd等)
查看>>
Angular 6 + 折腾记 :(11) 写一个挺不靠谱的多少秒/分/时/天前的管道
查看>>
掘金翻译计划周报 — 2018 年 9 月第 2 期
查看>>
整合登录界面与管理系统
查看>>
PyCon2018 回顾 (Part 1)
查看>>
vuex
查看>>
平时自己项目中用到的 CSS
查看>>
微信小程序5月带给我们的惊喜
查看>>
如何实现类似易企秀的可视化 H5 编辑器?
查看>>
[译] 游戏即服务的五条建议,提升游戏变现能力
查看>>
数据结构:链表
查看>>