装饰者模式对HttpServletRequest进行增强

 1 package cn.web.servlet;
 2 
 3 import java.io.UnsupportedEncodingException;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletRequestWrapper;
 7 /**
 8  * 装饰者模式对HttpServletRequest进行增强。
 9  * 两种方法:
10  *         1. implements HttpServletRequest(所有的方法都要自己来重写,所以,建议使用第二种方法,也就是通过继承HttpServletRequestWrapper,再对自己的需要进行重写相应的方法)
11  *         2. extends HttpServletRequestWrapper(已经用装饰者模式帮我们重写所有的方法,我们只需要重写自己需要重写的方法就可以了,而免去了对其它方法的进行重写的麻烦)
12  * @author Administrator
13  *
14  */
15 public class EncodingRequest extends HttpServletRequestWrapper {
16     private HttpServletRequest req ;
17     public EncodingRequest(HttpServletRequest request) {
18         super(request);
19         this.req = request;
20     }
21     /**
22      * 增强getParameter()方法,使其能够自行处理get的编码问题
23      */
24     @Override
25     public String getParameter(String name) {
26         String value = req.getParameter(name);
27         try {
28             value = new String(value.getBytes("ISO-8859-1"),"UTF-8");//处理get方式
29         } catch (UnsupportedEncodingException e) {
30             e.printStackTrace();
31         }
32         return value;
33     }
34 }

主要增强了request的编码问题。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于已经加密的 HttpServletRequest,解密处理需要以下步骤: 1. 获取加密数据:从 HttpServletRequest 中获取加密数据,可以使用 getInputStream() 或 getReader() 方法。 2. 解密数据:使用相应的解密算法对加密数据进行解密,得到明文数据。 3. 将明文数据重新封装成 HttpServletRequest 对象:根据解密后的明文数据,重新构造一个 HttpServletRequest 对象。 以下是一个简单的解密处理示例: ```java public class DecryptedRequestWrapper extends HttpServletRequestWrapper { private final byte[] decryptedBytes; public DecryptedRequestWrapper(HttpServletRequest request, byte[] key) throws Exception { super(request); // 获取加密数据 ServletInputStream inputStream = request.getInputStream(); byte[] encryptedBytes = IOUtils.toByteArray(inputStream); // 解密数据 byte[] ivBytes = Arrays.copyOfRange(encryptedBytes, 0, 16); byte[] contentBytes = Arrays.copyOfRange(encryptedBytes, 16, encryptedBytes.length); byte[] decryptedContentBytes = AESUtil.decrypt(contentBytes, key, ivBytes); decryptedBytes = ArrayUtils.addAll(ivBytes, decryptedContentBytes); } @Override public ServletInputStream getInputStream() throws IOException { return new ServletInputStreamImpl(decryptedBytes); } @Override public BufferedReader getReader() throws IOException { return new BufferedReader(new InputStreamReader(getInputStream())); } } ``` 其中,AESUtil 是一个 AES 解密工具类,可以根据具体业务需求自行实现。ServletInputStreamImpl 是一个自定义的 ServletInputStream 实现类,用于将解密后的字节数组包装成 ServletInputStream 对象。以上代码仅供参考,具体实现应根据实际情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值