フィルタ配合装飾器モードによる要求パラメータの暗号化
3856 ワード
1、目標
リクエストリクエストパラメータの暗号化を完了
2、設計の知識点
a、filter、servlet、アクセサリーモード
3、問題が発生した
このプログラムを書くときにちょっとした問題に遭遇しました.どんな問題ですか.
a、HttpServ letRequestWrapperとservletRequestWrapperに関する問題である.
b、HttpServletRequestWrapperはHttpServletRequestインターフェースを実現し、後者はServletRequestインターフェースを実現する.
c、最初の要求の時、システムのデフォルトの要求はタイプがrequestFacadeの1つのタイプで、このrequestFacadeタイプはHttpServeretRquestのインタフェースを実現した.
d、私が初めて使ったとき、私が書いたE n c r y p t ionReqestWrapperクラスはサーブレットRequstWrapperのクラスを継承していました.プログラムは間違っていませんが、実行すると間違っています.not-requestとresponeです.ネットで調べました.大体の意味は伝わるrequestのタイプが間違っていることです.
e、だから私は1つの実験をして私はサーブレットRequestインタフェースの実装クラスがパラメータとしてdofilterの中のrequestにパラメータとして伝わることができないと思っています;しかし、私の実験結果は可能なプログラムで間違いを報告しませんでした.しかし、精度が失われ、親に子を受信すると、精度が失われ、その後、doFIlterのrequestにHttpServertReqestのタイプを1つしか転送できません.プログラムは間違っていません.正しく動作する;
f、補足すると、filterブロッキングを使用するためdoFilterにおけるrequestは、HttpServertRequestインタフェースを実現したrequestFacadeである.入力されたパラメータの最終タイプが一致していればよい.
a、コアコード
4、servletRequestとHttpServiceletReqestの継承関係について;
5、md 5プログラム中のmd 5については、中国語を暗号化する際にネット上と一致しないため、復号する必要がある場合は、同様にプログラム中のmd 5を暗号化してマッチングして検証してください.Toolsキットが必要な友達は私のQ 619066780を追加します;
6、プロジェクトのソース-無料ダウンロードですよ;
http://download.csdn.net/detail/u011431550/8321637
リクエストリクエストパラメータの暗号化を完了
2、設計の知識点
a、filter、servlet、アクセサリーモード
3、問題が発生した
このプログラムを書くときにちょっとした問題に遭遇しました.どんな問題ですか.
a、HttpServ letRequestWrapperとservletRequestWrapperに関する問題である.
b、HttpServletRequestWrapperはHttpServletRequestインターフェースを実現し、後者はServletRequestインターフェースを実現する.
c、最初の要求の時、システムのデフォルトの要求はタイプがrequestFacadeの1つのタイプで、このrequestFacadeタイプはHttpServeretRquestのインタフェースを実現した.
d、私が初めて使ったとき、私が書いたE n c r y p t ionReqestWrapperクラスはサーブレットRequstWrapperのクラスを継承していました.プログラムは間違っていませんが、実行すると間違っています.not-requestとresponeです.ネットで調べました.大体の意味は伝わるrequestのタイプが間違っていることです.
e、だから私は1つの実験をして私はサーブレットRequestインタフェースの実装クラスがパラメータとしてdofilterの中のrequestにパラメータとして伝わることができないと思っています;しかし、私の実験結果は可能なプログラムで間違いを報告しませんでした.しかし、精度が失われ、親に子を受信すると、精度が失われ、その後、doFIlterのrequestにHttpServertReqestのタイプを1つしか転送できません.プログラムは間違っていません.正しく動作する;
f、補足すると、filterブロッキングを使用するためdoFilterにおけるrequestは、HttpServertRequestインタフェースを実現したrequestFacadeである.入力されたパラメータの最終タイプが一致していればよい.
a、コアコード
package com.wen.wrapper;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import com.wen.md5.SecurityUtil;
import com.wen.propertis.PropertiesUtils;
public class EncryptionReqestWrapper extends HttpServletRequestWrapper {
private static String secretKey;
/**
*
*/
static {
Properties prop = PropertiesUtils.getInstance().load("secretKey");
secretKey = prop.getProperty("key");
}
public EncryptionReqestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
try {
return SecurityUtil.md5(secretKey, super.getParameter(name));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
@Override
public Map<String, String[]> getParameterMap() {
//
for (Map.Entry<String, String[]> m : super.getParameterMap().entrySet()) {
for (int i = 0; i < m.getValue().length; i++) {
//
try {
m.getValue()[i] = SecurityUtil.md5(secretKey, m.getValue()[i]);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
return super.getParameterMap();
}
@Override
public String[] getParameterValues(String name) {
String[] parameterValues = super.getParameterValues(name);
for (int i = 0; i < parameterValues.length; i++) {
try {
parameterValues[i] = SecurityUtil.md5(secretKey, parameterValues[i]);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
return parameterValues;
}
}
package com.wen.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 com.wen.wrapper.EncryptionReqestWrapper;
public class EncryptionFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
request = new EncryptionReqestWrapper((HttpServletRequest) request);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
4、servletRequestとHttpServiceletReqestの継承関係について;
5、md 5プログラム中のmd 5については、中国語を暗号化する際にネット上と一致しないため、復号する必要がある場合は、同様にプログラム中のmd 5を暗号化してマッチングして検証してください.Toolsキットが必要な友達は私のQ 619066780を追加します;
6、プロジェクトのソース-無料ダウンロードですよ;
http://download.csdn.net/detail/u011431550/8321637