JSONP请求控制

前端之家收集整理的这篇文章主要介绍了JSONP请求控制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Web.xml中配置Filter

  1. <!-- JSONP请求控制 -->
  2. <filter>
  3. <filter-name>jsonpFilter</filter-name>
  4. <filter-class>JsonpFilter路径</filter-class>
  5. <async-supported>true</async-supported>
  6. </filter>
  7. <filter-mapping>
  8. <filter-name>jsonpFilter</filter-name>
  9. <url-pattern>/*</url-pattern>
  10. </filter-mapping>

编写jsonpFilter
  1. import java.io.ByteArrayOutputStream;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.Map;
  7.  
  8. import javax.servlet.Filter;
  9. import javax.servlet.FilterChain;
  10. import javax.servlet.FilterConfig;
  11. import javax.servlet.ServletException;
  12. import javax.servlet.ServletOutputStream;
  13. import javax.servlet.ServletRequest;
  14. import javax.servlet.ServletResponse;
  15. import javax.servlet.WriteListener;
  16. import javax.servlet.http.HttpServletResponse;
  17. import javax.servlet.http.HttpServletResponseWrapper;
  18.  
  19. import net.sf.json.JSONException;
  20. import net.sf.json.JSONObject;
  21.  
  22. import org.springframework.http.HttpStatus;
  23.  
  24. public final class JsonpFilter implements Filter {
  25. public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException {
  26. if (request.getParameter("callback") != null) {
  27. ByteResponseWrapper brw = new ByteResponseWrapper((HttpServletResponse) response);
  28. chain.doFilter(request,brw);
  29. String out = new String(brw.getBytes());
  30. Map<String,Object> map = null;
  31. try {
  32. map = JsonTool.getMap4Json(out);
  33. } catch (JSONException ex) {
  34.  
  35. }
  36. if (map != null) {
  37. ((HttpServletResponse) response).setStatus(HttpStatus.OK.value());
  38. int status = brw.getStatus();
  39. if (status >= 200 && status < 300 || status == 304) {
  40. if (status == 304) {
  41. ((HttpServletResponse) response).setStatus(HttpStatus.NOT_MODIFIED.value());
  42. }
  43. map.put("status","success");
  44. } else {
  45. map.put("status","error");
  46. }
  47. out = JSONObject.fromObject(map).toString();
  48. }
  49. out = request.getParameter("callback") + "(" + out;
  50. out += ")";
  51. response.setContentType("application/json; charset=utf-8");
  52. response.setContentLength(out.getBytes().length);
  53. response.getOutputStream().write(out.getBytes());
  54. } else {
  55. chain.doFilter(request,response);
  56. }
  57. }
  58.  
  59. public void destroy() {
  60. }
  61.  
  62. public void init(FilterConfig filterConfig) {
  63. }
  64.  
  65. static class ByteResponseWrapper extends HttpServletResponseWrapper {
  66. private PrintWriter writer;
  67. private ByteOutputStream output;
  68. private int code = 200;
  69.  
  70. public byte[] getBytes() {
  71. writer.flush();
  72. return output.getBytes();
  73. }
  74.  
  75. public ByteResponseWrapper(HttpServletResponse response) {
  76. super(response);
  77. output = new ByteOutputStream();
  78. writer = new PrintWriter(output);
  79. }
  80.  
  81. @Override
  82. public PrintWriter getWriter() {
  83. return writer;
  84. }
  85.  
  86. @Override
  87. public ServletOutputStream getOutputStream() throws IOException {
  88. return output;
  89. }
  90.  
  91.  
  92. public int getStatus() {
  93. return code;
  94. }
  95. public void sendRedirect(String location) throws IOException {
  96. code = HttpStatus.MOVED_TEMPORARILY.value();
  97. super.sendRedirect(location);
  98. }
  99. @Override
  100. public void setStatus(int sc) {
  101. this.code = sc;
  102. }
  103.  
  104. @Override
  105. public void setStatus(int sc,String message) {
  106. this.code = sc;
  107. }
  108.  
  109. @Override
  110. public void sendError(int sc) throws IOException {
  111. this.code = sc;
  112. }
  113.  
  114. @Override
  115. public void sendError(int sc,String msg) throws IOException {
  116. this.code = sc;
  117. }
  118. }
  119.  
  120. static class ByteOutputStream extends ServletOutputStream {
  121. private ByteArrayOutputStream bos = new ByteArrayOutputStream();
  122.  
  123. @Override
  124. public void write(int b) throws IOException {
  125. bos.write(b);
  126. }
  127.  
  128. public byte[] getBytes() {
  129. return bos.toByteArray();
  130. }
  131.  
  132. @Override
  133. public boolean isReady() {
  134. return false;
  135. }
  136.  
  137. @Override
  138. public void setWriteListener(WriteListener arg0) {
  139. }
  140. }
  141.  
  142. private static class JsonTool {
  143. public static Map getMap4Json(String jsonString) {
  144. JSONObject jsonObject = JSONObject.fromObject(jsonString);
  145. Iterator keyIter = jsonObject.keys();
  146. String key;
  147. Object value;
  148. Map valueMap = new HashMap();
  149.  
  150. while (keyIter.hasNext()) {
  151. key = (String) keyIter.next();
  152. value = jsonObject.get(key);
  153. valueMap.put(key,value);
  154. }
  155.  
  156. return valueMap;
  157. }
  158. }
  159. }

猜你在找的Json相关文章