some-codes

-----------------------------------------

文仅为个人开发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">&nbsp;
                                    &nbsp;清空&nbsp; &nbsp;</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();
            }
        }

     }); */

---------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值