分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤

 

案例1. 利用Servlet的过滤器Filter进行完成脏话过滤

package cn.javabs.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;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

public class DirtyWordsFilterDemo implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request;
		HttpServletResponse response;
		try{
			request = (HttpServletRequest)req;
			response = (HttpServletResponse)resp;
		}catch(Exception e){
			throw new RuntimeException("non-http request");
		}
		DirtyWordHttpServletRequest dwrequest = new DirtyWordHttpServletRequest(request);
		chain.doFilter(dwrequest, response);
		

	}

	public void destroy() {

	}

}
class DirtyWordHttpServletRequest extends HttpServletRequestWrapper{
	private String strs[] = {"傻逼","畜生","我去年买了个包"};
	private HttpServletRequest request;
	public DirtyWordHttpServletRequest(HttpServletRequest request){
		super(request);
		this.request = request;
	}
	@Override
	public String getParameter(String name) {
		String value = request.getParameter(name);
		if(value==null)
			return null;
		for(String s:strs){
			if(value.contains(s)){
				value = value.replace(s, "**");
			}
		}
		return value;
	}
	
}

案例2. 利用Servlet的过滤器Filter进行完成Html编码过滤

package cn.javabs.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;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

public class HtmlFilterDemo implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request;
		HttpServletResponse response;
		try{
			request = (HttpServletRequest)req;
			response = (HttpServletResponse)resp;
		}catch(Exception e){
			throw new RuntimeException("non-http request");
		}
		
		HtmlHttpServletRequest hrequest = new HtmlHttpServletRequest(request);
		chain.doFilter(hrequest, response);

	}

	public void destroy() {

	}

}
class HtmlHttpServletRequest extends HttpServletRequestWrapper{
	private HttpServletRequest request;
	public HtmlHttpServletRequest(HttpServletRequest request){
		super(request);
		this.request = request;
	}
	@Override
	public String getParameter(String name) {
		String value = request.getParameter(name);
		if(value==null)
			return null;
		value = htmlFilter(value);
		return value;
	}
	private String htmlFilter(String message) {
		if (message == null)
            return (null);

        char content[] = new char[message.length()];
        message.getChars(0, message.length(), content, 0);
        StringBuffer result = new StringBuffer(content.length + 50);
        for (int i = 0; i < content.length; i++) {
            switch (content[i]) {
            case '<':
                result.append("&lt;");
                break;
            case '>':
                result.append("&gt;");
                break;
            case '&':
                result.append("&amp;");
                break;
            case '"':
                result.append("&quot;");
                break;
            default:
                result.append(content[i]);
            }
        }
        return (result.toString());
	}
	
}

案例3. 利用Servlet的过滤器Filter进行完成字符编码过滤(Get及Post方式)

	package cn.javabs.filter;

	import java.io.IOException;
	import java.io.UnsupportedEncodingException;

	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;
	import javax.servlet.http.HttpServletRequestWrapper;
	import javax.servlet.http.HttpServletResponse;
	/**
       * 同时解决GET及POST请求参数和响应输出的编码过滤器
       */
	public class SetAllEncodingFilterDemo implements Filter {
		private FilterConfig filterConfig;
		public void init(FilterConfig filterConfig) throws ServletException {
			this.filterConfig = filterConfig;
		}

		public void doFilter(ServletRequest req, ServletResponse resp,
				FilterChain chain) throws IOException, ServletException {
			HttpServletRequest request;
			HttpServletResponse response;
			try{
				request = (HttpServletRequest)req;
				response = (HttpServletResponse)resp;
			}catch(Exception e){
				throw new RuntimeException("non-http request");
			}
			String encoding = "UTF-8";
			String value = filterConfig.getInitParameter("encoding");
			if(value!=null){
				encoding = value;
			}
			
			request.setCharacterEncoding(encoding);//POST请求方式
			response.setContentType("text/html;charset="+encoding);
			MyHttpServletRequest mrequest = new MyHttpServletRequest(request);
			chain.doFilter(mrequest, response);
		}

		public void destroy() {

		}

	}
	class MyHttpServletRequest extends HttpServletRequestWrapper{
		private HttpServletRequest request;
		public MyHttpServletRequest(HttpServletRequest request){
			super(request);
			this.request = request;
		}
		public String getParameter(String name) {
			String value = request.getParameter(name);
			if(value==null)
				return value;
			try {
				if("get".equalsIgnoreCase(request.getMethod()))
					value = new String(value.getBytes("ISO-8859-1"),request.getCharacterEncoding());
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			return value;
		}
		
	}

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
当用户访问需要管理员权限的页面时,我们需要对用户进行过滤并跳转到登录界面。这可以通过使用过滤器来实现。 以下是一个示例过滤器代码,该过滤器将检查用户是否已登录并具有管理员权限。如果用户未登录,则将其重定向到登录页面。如果用户已登录但没有管理员权限,则将其重定向到错误页面。 ```java public class AdminFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; // 检查用户是否已登录 HttpSession session = req.getSession(false); boolean isLoggedIn = (session != null && session.getAttribute("user") != null); // 检查用户是否具有管理员权限 boolean isAdmin = false; if (isLoggedIn) { User user = (User) session.getAttribute("user"); isAdmin = user.isAdmin(); } // 如果用户未登录或未具有管理员权限,则将其重定向到登录页面或错误页面 if (!isLoggedIn) { res.sendRedirect(req.getContextPath() + "/login.jsp"); } else if (!isAdmin) { res.sendRedirect(req.getContextPath() + "/error.jsp"); } else { chain.doFilter(request, response); } } // 其他方法 } ``` 在使用过滤器时,需要在web.xml文件进行配置。例如,我们可以将上述过滤器配置为拦截所有以/admin开头的请求: ```xml <filter> <filter-name>AdminFilter</filter-name> <filter-class>com.example.AdminFilter</filter-class> </filter> <filter-mapping> <filter-name>AdminFilter</filter-name> <url-pattern>/admin/*</url-pattern> </filter-mapping> ``` 这将使过滤器拦截所有以/admin开头的请求,并在执行处理程序之前检查用户是否已登录并具有管理员权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨校

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值