-----------------------------------------
文仅为个人开发code摘抄,对于他人可能并无意义,故设置权限,不公开了
---------------------
----------------------------------------------------
标签: 流读取, post json传值 一次性读取流, 切面日志
--------------------------------------------------------------
package com.interceptor.logger; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; public class BufferedServletInputStream extends ServletInputStream { private ByteArrayInputStream inputStream; public BufferedServletInputStream(byte[] buffer) { this.inputStream = new ByteArrayInputStream( buffer ); } @Override public int available() throws IOException { return inputStream.available(); } @Override public int read() throws IOException { return inputStream.read(); } @Override public int read(byte[] b, int off, int len) throws IOException { return inputStream.read( b, off, len ); } @Override public boolean isFinished() { return false; } @Override public boolean isReady() { return false; } @Override public void setReadListener(ReadListener readListener) { } }
--------------------------------------------
package com.interceptor.logger; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public class BufferedServletRequestWrapper extends HttpServletRequestWrapper { private byte[] body; private String content; public BufferedServletRequestWrapper(HttpServletRequest request) throws IOException { super(request); content = new String(getBodyString(request).getBytes()); body = content.getBytes(StandardCharsets.UTF_8); } public String getBody() { return content; } @Override public BufferedReader getReader() throws IOException { return new BufferedReader(new InputStreamReader(getInputStream())); } @Override public ServletInputStream getInputStream() throws IOException { final ByteArrayInputStream bais = new ByteArrayInputStream(body); return new ServletInputStream() { @Override public int read() throws IOException { return bais.read(); } @Override public boolean isFinished() { return false; } @Override public boolean isReady() { return false; } @Override public void setReadListener(ReadListener readListener) { } }; } public static String getBodyString(ServletRequest request) { StringBuilder sb = new StringBuilder(); InputStream inputStream = null; BufferedReader reader = null; try { inputStream = request.getInputStream(); reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8"))); String line = ""; while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return sb.toString(); } }
--------------------
package com.interceptor.logger; import java.lang.annotation.*; @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MpLogger { /** * 日志内容 */ String value(); /** * 日志类型 长度必须是六位 */ String code() default "000000"; /** * 操作资源id 变量名 */ String source(); }
-----------------------------
package com.interceptor.logger; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @WebFilter(filterName = "loggerFilter", description = "日志拦截", urlPatterns = {"/*"}) public class MpLoggerFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // System.out.println("JSON.toJSONString((HttpServletRequest) request.getParameterMap()) = " + JSON.toJSONString(((HttpServletRequest) request).getParameterMap())); ServletRequest requestWrapepr = null; if(request instanceof HttpServletRequest){ // 通过这个,我们获取到请求头,必须是application/json 的,我们才给予包装,减少影响 String header = ((HttpServletRequest) request).getHeader("content-type"); if(header != null && header .equals("application/json")){ requestWrapepr = new BufferedServletRequestWrapper((HttpServletRequest) request); } } if (requestWrapepr == null) { chain.doFilter(request, response); } else { chain.doFilter(requestWrapepr, response); } } @Override public void destroy() { } }
-----------------------------
package com.interceptor.logger; import com.alibaba.fastjson.JSON; import com.config.Constants; import com.controller.Log.MuserLog; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.Map; public class MpLoggerInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { try { if (!(handler instanceof HandlerMethod)) { return true; } MpLogger validate = ((HandlerMethod) handler).getMethodAnnotation(MpLogger.class); if (validate == null) { return true; } String value = validate.value(); // zz_type String code = validate.code(); // zz_type_num String source = validate.source(); Object sourceId = ""; // 对应数据表 zz_resource_id String paramStr = ""; // zz_parms // 请求content-type 为 application/json的 参数获取方式 // BufferedServletRequestWrapper requestWrapper = new BufferedServletRequestWrapper(request); // System.out.println("requestWrapper.getBody() = " + requestWrapper.getBody()); // String jsonBody = requestWrapper.getBody(); // if (!jsonBody.isEmpty()) { // paramStr += jsonBody; // Map paramMap = JSON.parseObject(jsonBody, HashMap.class); // if (sourceId == null || sourceId.toString().isEmpty()) { // sourceId = paramMap.get(validate.source()); // } // } // 默认 表单请求方式 参数获取方式 Map paramMap = request.getParameterMap(); if (paramMap.size() > 0) { paramStr += JSON.toJSONString(paramMap); // System.out.println("request.getParameter(validate.source()) = " + request.getParameter(validate.source())); if (sourceId == null || sourceId.toString().isEmpty()) { sourceId = request.getParameter(validate.source()); } } // url 连接 @PathVariable 参数获取方式 Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); // System.out.println("pathVariables.get(validate.source()) = " + pathVariables.get(validate.source())); if (sourceId == null || sourceId.toString().isEmpty()) { sourceId = pathVariables.get(validate.source()); } if (sourceId == null) { sourceId = ""; } // 获取json 数据 String body = ""; if (request instanceof BufferedServletRequestWrapper) { body = ((BufferedServletRequestWrapper) request).getBody(); } // 获取用户基本信息 HttpSession session = request.getSession(); Map userMap = (Map) session.getAttribute(Constants.userMap); // 存储日志 Map m = MuserLog.addMuserLog(request, userMap, sourceId.toString(), paramStr + body, value, code + ""); } catch (Exception e) { e.printStackTrace(); } return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { } }
------------------------------------------------------------------------------------------
springboot 下
标签: 流读取, post json传值 一次性读取流, 切面日志
---------------------------------------------------------------------------------------
---------------------------------------------------------
代码来源于小诺 -------- ------------------------ package com.mch.core.web; import org.springframework.core.Conventions; import org.springframework.core.MethodParameter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.lang.Nullable; import org.springframework.validation.BindingResult; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.ModelAndViewContainer; import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor; import com.mch.core.context.param.RequestParamContext; import java.util.List; /** * 拓展原有RequestResponseBodyMethodProcessor,只为缓存临时参数 * * @author xuyuxiang * @date 2020/8/21 20:51 */ public class SnowyRequestResponseBodyMethodProcessor extends RequestResponseBodyMethodProcessor { public SnowyRequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> converters) { super(converters); } @Override public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { parameter = parameter.nestedIfOptional(); Object arg = readWithMessageConverters(webRequest, parameter, parameter.getNestedGenericParameterType()); // 临时缓存一下@RequestBody注解上的参数 RequestParamContext.setObject(arg); String name = Conventions.getVariableNameForParameter(parameter); if (binderFactory != null) { WebDataBinder binder = binderFactory.createBinder(webRequest, arg, name); if (arg != null) { validateIfApplicable(binder, parameter); if (binder.getBindingResult().hasErrors() && isBindExceptionRequired(binder, parameter)) { throw new MethodArgumentNotValidException(parameter, binder.getBindingResult()); } } if (mavContainer != null) { mavContainer.addAttribute(BindingResult.MODEL_KEY_PREFIX + name, binder.getBindingResult()); } } return adaptArgumentIfNecessary(arg, parameter); } }
-----------------------------
/** * 自定义的SnowyRequestResponseBodyMethodProcessor,放在所有resolvers之前 * * @author xuyuxiang * @date 2020/8/21 21:09 */ @Configuration public static class MethodArgumentResolver { @Resource private RequestMappingHandlerAdapter adapter; @PostConstruct public void injectSelfMethodArgumentResolver() { List<HandlerMethodArgumentResolver> argumentResolvers = new ArrayList<>(); argumentResolvers.add(new SnowyRequestResponseBodyMethodProcessor(adapter.getMessageConverters())); argumentResolvers.addAll(Objects.requireNonNull(adapter.getArgumentResolvers())); adapter.setArgumentResolvers(argumentResolvers); } }
---------------------------------------------------------------------------
以前上班时的简单代码
--------------------------------------------------
1.链接跳转
<li style="float:right;"><a href="/html/zz/sellers_add.html" target="_blank" class="btn_caozuo">增加</a></li>
2.链接传递数据
加码
function bmdUpdate(id,realname,phone,company){
window.location.href = "/html/zz/sellers_update.html?id="+id+"&realname="+encodeURI(encodeURI(realname))+"&phone="+phone+"&company="+encodeURI(encodeURI(company));
}
解码
/*获取地址栏指定参数 */
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
$(function(){
$("#_id").val(getQueryString("id"));
$("#name").val(decodeURI(getQueryString("realname")));
$("#phone").val(getQueryString("phone"));
$("#company").val(decodeURI(getQueryString("company")));
})
3.清空
<button type="button" οnclick="reset()" class="btn btn-default">
清空 </button>
function search(){
conditionData.company = $("#seller_company_name").val();
conditionData.realname = $("#seller_realname").val();
conditionData.seller_phone = $("#seller_phone").val();
page(1);
}
function reset(){
$("#seller_company_name").val("");
$("#seller_realname").val("");
$("#seller_phone").val("");
search();
}
4.ajax 例子
/* $.ajax({
url:'/message/send/members/ids.json',
type:"get",
traditional: true,
data:{
"check_val":check_val
},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (res) {
console.info(res);
if (res.data) {
alert('操作成功');
//box_hide();
window.location.href = '/html/notice/noticeInfo.html?res='+JSON.stringify(res);
} else {
alert('操作失败,请联系管理员');
box_hide();
}
}
}); */
---------------------------------------------------------