过滤敏感词汇---HttpServletRequest对象增强

在管理论坛或网站时,为了管理论坛或网站文明用语,屏蔽一些脏话或敏感词汇,需要对敏感词汇进行过滤。这是可以通过过滤器来管理全站用户提交的数据,对用户提交的数据进行敏感词汇识别。为了完成此功能,可以对有request容器带上来的数据进行过滤,reqeust本身无此功能,但可以通过对其进行适当增强,可以完成此功能。下面是示例代码。

DirtyWordsRequest是对敏感词汇进行过滤的增强型request

public class DirtyWordsRequest extends HttpServletRequestWrapper {
	private HttpServletRequest request;
	private String[] dirtyWords = {"aa", "bbb", "ccc"};
	
	public DirtyWordsRequest(HttpServletRequest request) {
		super(request);
		// TODO Auto-generated constructor stub
		
		this.request = request;
	}

	@Override
	public String getParameter(String name) {
		// TODO Auto-generated method stub
		String value = request.getParameter(name);
		if(value==null){
			return null;
		}
		
		for(int i=0; i<dirtyWords.length; i++){
			value = value.replaceAll(dirtyWords[i], "***");
		}
		
		return value;
	}
}
Filter,放行时,使用DirtyWordsRequest对象实体,进行放行。

@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)resp;
		
		DirtyWordsRequest myRequest = new DirtyWordsRequest(request);
		
		myRequest.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		chain.doFilter(myRequest, response);
	}

为了是request对象同时具有解决乱码,识别html格式,过滤敏感词汇,可以在访问真正资源前,分别为其增加一个过滤器,如下:

<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>
	
	<filter>
		<filter-name>HtmlFilter</filter-name>
		<filter-class>cn.itcast.filters.HtmlFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>HtmlFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>
	
	<filter>
		<filter-name>DirtyFilter</filter-name>
		<filter-class>cn.itcast.filters.DirtyFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>DirtyFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
	</filter-mapping>
此时全站的请求访问本站的web资源的乱码问题,html格式数据问题,及敏感词汇问题都将得以解决。

微信扫码订阅
UP更新不错过~
关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 创建HttpServletRequest对象的方法有多种,以下是其中一种: 1. 在Servlet中,可以通过doGet()或doPost()方法的参数HttpServletRequest request来获取HttpServletRequest对象。 例如: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取HttpServletRequest对象 HttpServletRequest req = request; // 其他操作 } 2. 在JSP中,可以通过内置对象request来获取HttpServletRequest对象。 例如: <% // 获取HttpServletRequest对象 HttpServletRequest req = request; // 其他操作 %> 3. 在普通Java类中,可以通过ServletActionContext.getRequest()方法来获取HttpServletRequest对象。 例如: import org.apache.struts2.ServletActionContext; public class Test { public void test() { // 获取HttpServletRequest对象 HttpServletRequest req = ServletActionContext.getRequest(); // 其他操作 } } ### 回答2: HTTPServletRequest对象ServletAPI中的一个重要接口,它提供了客户端发送的HTTP请求相关信息。创建HTTPServletRequest对象可以通过以下步骤: 1. 在JSP或Servlet的doGet()或doPost()方法中声明HttpServletRequest变量: ``` HttpServletRequest request; ``` 2. 通过Servlet的service()方法直接调用 HttpServletRequest 对象: ``` public void doGet(HttpServletRequest request, HttpServletResponse response) ``` 3. 利用ServletConfig对象调用 getServletContext() 方法获取ServletContext对象,从而获取HttpServletRequest对象: ``` ServletConfig config = getServletConfig(); ServletContext context = config.getServletContext(); HttpServletRequest request = (HttpServletRequest) context.getAttribute(“javax.servlet.request”); ``` 4. 调用HttpServletRequest的getSession()方法获取HTTPSession对象: ``` HttpSession session = request.getSession(true); ``` 5. 利用HttpServletRequest的getParameter()方法获取客户端发送的参数值: ``` String parameter = request.getParameter("paramName"); ``` 总之,创建HttpServletRequest对象主要是利用ServletAPI提供的方法和接口,通过获取ServletContext和HTTPSession对象,并使用其方法获取需要的数据。 ### 回答3: 在Java Web开发中,我们经常需要创建HttpServletRequest对象,来获取客户端请求的信息。HttpServletRequest对象代表了客户端HTTP请求。通过HttpServletRequest对象,我们可以获取客户端请求的URL、请求参数、请求头等信息。在下面,我将简单介绍一下如何创建HttpServletRequest对象HttpServletRequest对象的创建是由Web服务器完成的,我们在Servlet中只需要从方法参数中获取HttpServletRequest对象即可。Web服务器在客户端请求时,会根据请求信息创建一个HttpServletRequest对象,并将其传递给Servlet的service()方法。 例如,在一个Servlet中,我们可以重写doGet()或doPost()方法,获取HttpServletRequest对象。实例代码如下: ``` protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取HttpServletRequest对象 HttpServletRequest httpServletRequest = request; // 获取请求参数的值 String username = request.getParameter("username"); String password = request.getParameter("password"); // 处理业务逻辑 // ... // 发送响应到客户端 } ``` 在上面的示例代码中,我们重写了doGet()方法,并从方法参数中获取了HttpServletRequest对象。接下来,我们通过HttpServletRequest对象获取了HTTP请求的参数值,并处理了业务逻辑。 除了从方法参数中获取HttpServletRequest对象外,还可以使用HttpServletRequestWrapper类来创建HttpServletRequest对象HttpServletRequestWrapper是HttpServletRequest的子类,它重写了HttpServletRequest中的所有方法。我们可以通过继承HttpServletRequestWrapper类,实现自己的HttpServletRequest对象,同时保留HttpServletRequest原有的方法。实例代码如下: ``` public class MyHttpServletRequest extends HttpServletRequestWrapper { public MyHttpServletRequest(HttpServletRequest request) { super(request); } // 重写HttpServletRequest中的方法 // ... } ``` 在上面的代码中,我们创建了一个自定义的HttpServletRequest对象MyHttpServletRequest,并重写了HttpServletRequest中的方法。我们可以通过重写这些方法,在不改变原HttpServletRequest行为的情况下,为我们的应用程序添加一些新的特性。 在Java Web开发中,HttpServletRequest对象是非常重要的一个对象。通过HttpServletRequest对象,我们可以获取客户端请求的信息,实现业务逻辑,并生成HTTP响应。无论是从方法参数中获取HttpServletRequest对象,还是通过HttpServletRequestWrapper类来创建HttpServletRequest对象,我们都可以灵活地应用在实际的开发中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿良的空间

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值