public class MyEncodingFilter extends OncePerRequestFilter {
// Determine whether the Servlet 2.4 HttpServletResponse.setCharacterEncoding(String)
// method is available, for use in the "doFilterInternal" implementation.
private final static boolean responseSetCharacterEncodingAvailable = ClassUtils.hasMethod(
HttpServletResponse.class, "setCharacterEncoding", new Class[] {String.class});
private String encoding;
private boolean forceEncoding = false;
public void setEncoding(String encoding) {
this.encoding = encoding;
}
public void setForceEncoding(boolean forceEncoding) {
this.forceEncoding = forceEncoding;
}
@SuppressWarnings("unchecked")
protected void doFilterInternal(
HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 根据请求地址判断是否需要根据不同的请求转码
if (request.getRequestURI().indexOf("AAA_bbb") > -1){
String encode = request.getParameter("encode");
if (null == encode){
encode = this.encoding;
}
Map<String, String[]> readOnlyMap = request.getParameterMap();
Map<String, String[]> writeAbleMap = new HashMap<String, String[]>();
writeAbleMap.putAll(readOnlyMap);
for (String key : writeAbleMap.keySet()) {
String[] value = writeAbleMap.get(key);
for (int i = 0 ; i < value.length ; i++) {
value[i] = new String(value[i].getBytes("ISO-8859-1"),encode);
}
}
}else{
if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
request.setCharacterEncoding(this.encoding);
if (this.forceEncoding && responseSetCharacterEncodingAvailable) {
response.setCharacterEncoding(this.encoding);
}
}
}
filterChain.doFilter(request, response);
}
}
扩展spring编码过滤器,实现接收不同页面编码
最新推荐文章于 2024-06-20 09:37:13 发布