/** * 设置Parameters 的值 * @param key * @param val */ public void setParameters(String key,String val){ Map m = getRequest().getParameterMap(); //java.lang.reflect.Field lockedField; try { //lockedField = m.getClass().getDeclaredField("locked"); //lockedField.setAccessible(true); //System.out.println(lockedField.get(m)); //lockedField.set(m, false); //System.out.println(lockedField.get(m)); m.put(key, val); } catch (Exception e) { log.error(e.getMessage(), e); } }
package com.dep.aop; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 拦截防止sql注入 * @author wb_zypt * */ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { HttpServletRequest orgRequest = null; Map newParams = null; private static Logger log = LoggerFactory.getLogger(XssHttpServletRequestWrapper.class); public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); orgRequest = request; } /** * 覆盖getParameter方法,将参数名和参数值都做xss过滤。<br/> * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取<br/> * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖 */ @Override public String getParameter(String name) { String value = super.getParameter(xssEncode(name)); if (value != null) { value = xssEncode(value); } if(value == null){ value = (String)getParameterMap().get(name); } return value; } @Override @SuppressWarnings("unchecked") public Map getParameterMap() { if(newParams !=null){ return newParams; }else{ newParams = new HashMap(); } // Map newParams = new HashMap(); Map params = super.getParameterMap(); Set<String> keySet = params.keySet(); for (Iterator iterator = keySet.iterator(); iterator.hasNext();) { String key = (String) iterator.next(); Object obj = params.get(key); if(obj instanceof String){ String str = (String) params.get(key); newParams.put(key, xssEncode((String)str)); }else if(obj.getClass() == String[].class){ String[] str = (String[]) params.get(key); newParams.put(key, xssEncode((String[])str)); }else{ newParams.put(key, obj); } } /*java.lang.reflect.Field lockedField = null; try { lockedField = params.getClass().getDeclaredField("locked"); lockedField.setAccessible(true); lockedField.set(params, false); } catch (Exception e) { log.error(e.getMessage(), e); } Set<String> keySet = params.keySet(); for (Iterator iterator = keySet.iterator(); iterator.hasNext();) { String key = (String) iterator.next(); Object obj = params.get(key); if(obj instanceof String){ String str = (String) params.get(key); params.put(key, xssEncode((String)str)); }else{ String[] str = (String[]) params.get(key); params.put(key, xssEncode((String[])str)); } } if(lockedField!=null){ try { lockedField.set(params, true); } catch (Exception e) { log.error(e.getMessage(), e); } }*/ return newParams; } public String[] getParameterValues(String parameter) { String[] values = super.getParameterValues(parameter); if (values==null) { return null; } int count = values.length; String[] encodedValues = new String[count]; for (int i = 0; i < count; i++) { encodedValues[i] = xssEncode(values[i]); } return encodedValues; } /** * 覆盖getHeader方法,将参数名和参数值都做xss过滤。<br/> * 如果需要获得原始的值,则通过super.getHeaders(name)来获取<br/> * getHeaderNames 也可能需要覆盖 */ @Override public String getHeader(String name) { String value = super.getHeader(xssEncode(name)); if (value != null) { value = xssEncode(value); } return value; } private static String[] xssEncode(String[] s) { String[] newStr = new String[s.length]; for(int i=0;i<s.length;i++){ newStr[i]= xssEncode(s[i]); } return newStr; } /** * 将容易引起xss漏洞的半角字符直接替换成全角字符 * * @param s * @return */ private static String xssEncode(String s) { if (s == null || "".equals(s)) { return s; } StringBuilder sb = new StringBuilder(s.length() + 16); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); switch (c) { case '>': sb.append('>');//全角大于号 break; case '<': sb.append('<');//全角小于号 break; case '\'': sb.append('‘');//全角单引号 break; case '\"': sb.append('“');//全角双引号 break; case '&': sb.append('&');//全角 break; case '\\': sb.append('\');//全角斜线 break; case '#': sb.append('#');//全角井号 break; case '-': sb.append('-');//全角井号 break; case ';': sb.append(';');//全角井号 break; default: sb.append(c); break; } } return sb.toString(); } /** * 获取最原始的request * * @return */ public HttpServletRequest getOrgRequest() { return orgRequest; } /** * 获取最原始的request的静态方法 * * @return */ public static HttpServletRequest getOrgRequest(HttpServletRequest req) { if (req instanceof XssHttpServletRequestWrapper) { return ((XssHttpServletRequestWrapper) req).getOrgRequest(); } return req; } }
相关推荐
当调用`request.setEncoding("utf-8")`时,实际上是调用了`Request`类的`setCharacterEncoding`方法。这个方法首先检查一个布尔变量`usingReader`。如果`usingReader`为`true`,则意味着已经调用了`getReader()`...
在 Java Servlet 规范中,request.getcontextPath()方法是用于获取当前请求的Context Path的。该方法返回一个字符串,表示当前Web应用程序的Context Path。如果当前Web应用程序是根目录的话,返回的字符串为空。 ...
Files contained in javax.servlet.jar: META-INF/MANIFEST.MF javax/servlet/http/LocalStrings.properties javax.servlet.http.HttpSessionBindingListener.class javax.servlet....
首先,`HttpServletRequest`对象的`setCharacterEncoding`方法是用来设置请求体的字符编码,也就是用于处理POST请求中的数据编码。当你在过滤器中调用`request.setCharacterEncoding("UTF-8")`时,它会确保POST请求...
目的:tomcat10版本导致List<FileItem> fileItems = sfu.parseRequest(request) 入参的HttpServletRequest必须为:import jakarta.servlet.http.HttpServletRequest; 运行cmd,再该目录下执行: 执行步骤:java -...
在探讨`request.getParameter()`与`request.getAttribute()`的区别之前,我们首先需要理解这两个方法的基本概念以及它们在Java Web开发中的作用。 ### `request.getParameter()` `request.getParameter()`是...
`request.getParameterMap()`、`request.getParameter()`和`request.getParameterValues()`是三个重要的方法,它们分别用于获取不同类型的请求参数。接下来,我们将深入探讨这三个方法的功能、用法以及它们之间的...
- 初始化:当Servlet首次被请求或者在web.xml中配置了`load-on-startup`时,Servlet容器会调用Servlet的`init()`方法进行初始化。 - 服务:每当有新的请求到来,Servlet容器创建一个Servlet实例,然后调用`service...
1. **Servlet接口**:这是所有Servlet实现的基础,定义了Servlet的基本方法,如`init()`, `service()`, `destroy()`等,用于初始化、处理请求和销毁Servlet。 2. **GenericServlet类**:这是一个抽象Servlet类,...
request.getcontextPath() 是 Java 中一个非常重要的方法,它用于获取当前 Web 应用程序的 Context Path,换言之,就是获取当前项目的路径。在 Web 应用程序中,Context Path 是一个非常重要的概念,它是指当前项目...
javax.servlet.jsp.jstl-api-1.2.1.jar
例如,PageContext提供了访问各种作用域(如request、session、application)的对象,以及对其他JSP动作的支持。 【压缩包子文件的文件名称列表】: 1. javax.servlet.jar:这个文件包含了Servlet API的所有类和...
在Java编程环境中,`javax.servlet.jar` 是一个非常重要的库,它包含了Servlet和JSP(JavaServer Pages)的核心API,是开发Web应用程序的基础组件。这个包由Java EE(Enterprise Edition)标准提供,允许开发者创建...
javax.servlet JAR包,解决找不到 import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; jar包问题
- `Servlet`: 这是所有Servlet的基类,定义了Servlet的基本方法,如`init()`(初始化Servlet)、`service()`(处理请求)和`destroy()`(销毁Servlet)。 - `GenericServlet`: 它实现了`Servlet`接口,提供了通用...
// request.setCharacterEncoding("utf-8"); // //接收method属性的值 // String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if("login".equals(methodName)){ // ...
- **注解驱动的配置**:在Servlet 3.0中,可以通过在类或方法上使用注解(如`@WebServlet`,`@WebFilter`,`@WebListener`)来代替XML配置文件,简化部署描述符(web.xml)。 - **异步处理**:Servlet 3.0引入了...
A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both. Filters perform filtering in the ...
### Request中getContextPath、getServletPath、getRequestURI、request.getRealPath的区别 #### 一、概述 在Java Web开发中,对于HTTP请求处理时经常需要用到`HttpServletRequest`对象的方法来获取客户端请求的...
5. `javax.servlet.Filter`:过滤器接口,允许在请求到达Servlet之前对其进行拦截和修改,实现如身份验证、数据转换等功能。 6. `javax.servlet.FilterChain`:在Filter链中传递请求和响应的对象,让多个Filter可以...