Springboot @RequesstBody 跨域,传参无效,自定义拦截器

package com.gupao.vip.restonspringmvc.config;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.gupao.vip.restonspringmvc.message.MyHttpMessageConverter;
import com.gupao.vip.restonspringmvc.message.PropertiesPersonHttpMessageConverter;
import com.gupao.vip.restonspringmvc.myinter.AuthSecurityInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        // addPathPatterns 用于添加拦截规则
//        // excludePathPatterns 用于排除拦截
//        // 地址拦截器
//        registry.addInterceptor(new SessionInterceptor())
//                .addPathPatterns("/**")
//                .excludePathPatterns("/user/login") // 登录页
//                .excludePathPatterns("/api/code/get/pageCode");// 登陆验证码
//
//        super.addInterceptors(registry);
        // 用户操作日志拦截器
        registry.addInterceptor(new AuthSecurityInterceptor());
    }



    public void configureMessageConverters(List> converters) {
        System.out.println("--------------------------");
//        converters.add(new MappingJackson2HttpMessageConverter());
//        converters.add(new PropertiesPersonHttpMessageConverter());
        converters.add(new MyHttpMessageConverter());
    }
package com.gupao.vip.restonspringmvc.myinter;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONPObject;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

@Component("authSecurityInterceptor")
public class AuthSecurityInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
                             HttpServletResponse httpServletResponse,
                             Object o) throws Exception {
        try {
            RequestWrapper requestWrapper = new RequestWrapper(httpServletRequest);
            String body = requestWrapper.getBody();
            System.out.println(body);
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }

    @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 {
    }
}

 

package com.gupao.vip.restonspringmvc.myinter;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

@Component
@WebFilter(urlPatterns = "/*",filterName = "channelFilter")
public class ChannelFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        ServletRequest requestWrapper = null;
        InputStream inputStream = servletRequest.getInputStream();
        Map paraMap =  servletRequest.getParameterMap();
        if(servletRequest instanceof HttpServletRequest) {
            requestWrapper = new RequestWrapper((HttpServletRequest) servletRequest);
        }
        if(requestWrapper == null) {
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            filterChain.doFilter(requestWrapper, servletResponse);
        }
    }

    @Override
    public void destroy() {

    }
}

 

package com.gupao.vip.restonspringmvc.myinter;

import com.alibaba.fastjson.JSON;
import org.springframework.util.StringUtils;

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class RequestWrapper extends HttpServletRequestWrapper {
    private final String body;

    public RequestWrapper(HttpServletRequest request) {
        super(request);
        StringBuilder stringBuilder = new StringBuilder();
        BufferedReader bufferedReader = null;
        InputStream inputStream = null;
        try {
            inputStream = request.getInputStream();
            if (inputStream != null) {
                bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                char[] charBuffer = new char[128];
                int bytesRead = -1;
                while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
                    stringBuilder.append(charBuffer, 0, bytesRead);
                }
            } else {
                stringBuilder.append("");
            }
        } catch (Exception ex) {

        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        String sbbss = stringBuilder.toString();
        body = (sbbss.indexOf("=")==-1 && sbbss.indexOf("&")==-1 )? sbbss : string2json(stringBuilder.toString());
        System.out.println("body-------"+stringBuilder.toString());
        Map dataMap = new HashMap<>();
        dataMap.put("SSI_ID","123");
        dataMap.put("FMIX","456");
//
//        body = JSON.toJSONString(dataMap).toString();

        System.out.println("map  to json---"+JSON.toJSONString(dataMap).toString());
    }

    public String string2json(String dataString){
        if (StringUtils.isEmpty(dataString))return null;
        Map dataOuterMap = new HashMap<>();
        String[] dataAray = dataString.split("&");
        for (int i=0; i < dataAray.length;i++){
            String[] datakv= (dataAray[i]).split("=");
            if(datakv.length==1|| StringUtils.isEmpty(datakv[1]))
                continue;
            dataOuterMap.put(datakv[0],datakv[1]);

        }
        return JSON.toJSONString(dataOuterMap);
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
        ServletInputStream servletInputStream = new ServletInputStream() {
            @Override
            public boolean isFinished() {
                return false;
            }
            @Override
            public boolean isReady() {
                return false;
            }
            @Override
            public void setReadListener(ReadListener readListener) {
            }
            @Override
            public int read() throws IOException {
                return byteArrayInputStream.read();
            }
        };
        return servletInputStream;

    }

    @Override
    public BufferedReader getReader() throws IOException {
        return new BufferedReader(new InputStreamReader(this.getInputStream()));
    }

    public String getBody() {
        return this.body;
    }

}

 

 

package com.gupao.vip.restonspringmvc.message;

import com.gupao.vip.restonspringmvc.domain.SsiParam;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;

import java.io.*;
import java.nio.charset.Charset;
import java.util.Properties;

public class MyHttpMessageConverter extends AbstractHttpMessageConverter {

    public MyHttpMessageConverter() {
        super(MediaType.valueOf("application/properties+ssi"));
        setDefaultCharset(Charset.forName("UTF-8"));
    }

    @Override
    protected boolean supports(Class clazz) {
        return clazz.isAssignableFrom(SsiParam.class);
    }

    /**
     * 将请求内容中的properties转化成Person对象
     * person.id=1
     * person.name=Tom
     * @param clazz
     * @param inputMessage
     * @return
     * @throws IOException
     * @throws HttpMessageNotReadableException
     */
    @Override
    protected SsiParam readInternal(Class clazz,
                                  HttpInputMessage inputMessage)
            throws IOException, HttpMessageNotReadableException {
        InputStream inputStream = inputMessage.getBody();
        Properties properties = new Properties();
        properties.load(new InputStreamReader(inputStream));
        SsiParam ssiParam = new SsiParam();
        ssiParam.setSSI_ID(properties.getProperty("SSI_ID")); //{SSI_ID:"hello",FMID:"12213"}
        ssiParam.setFMID(properties.getProperty("FMID"));

        return ssiParam;
    }

    @Override
    protected void writeInternal(SsiParam person,
                                 HttpOutputMessage outputMessage)
            throws IOException, HttpMessageNotWritableException {


//        OutputStream outputStream = outputMessage.getBody();
//        Properties properties = new Properties();
//        properties.setProperty("person.id",person.getId().toString());
//        properties.setProperty("properties",person.getName());
//
//        properties.store(new OutputStreamWriter(outputStream),"my test");


    }




}

 

 

package com.gupao.vip.restonspringmvc.message;

import com.gupao.vip.restonspringmvc.domain.Person;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;

import java.io.*;
import java.nio.charset.Charset;
import java.util.Properties;

public class PropertiesPersonHttpMessageConverter extends AbstractHttpMessageConverter {

    public PropertiesPersonHttpMessageConverter() {
        super(MediaType.valueOf("application/properties+person"));
        setDefaultCharset(Charset.forName("UTF-8"));
    }

    @Override
    protected boolean supports(Class clazz) {
        return clazz.isAssignableFrom(Person.class);
    }

    /**
     * 将请求内容中的properties转化成Person对象
     * person.id=1
     * person.name=Tom
     * @param clazz
     * @param inputMessage
     * @return
     * @throws IOException
     * @throws HttpMessageNotReadableException
     */
    @Override
    protected Person readInternal(Class clazz,
                                  HttpInputMessage inputMessage)
            throws IOException, HttpMessageNotReadableException {
        InputStream inputStream = inputMessage.getBody();
        Properties properties = new Properties();
        properties.load(new InputStreamReader(inputStream));
        Person person = new Person();
        person.setId(Long.valueOf(properties.getProperty("person.id")));
        person.setName(properties.getProperty("person.name"));

        return person;
    }

    @Override
    protected void writeInternal(Person person,
                                 HttpOutputMessage outputMessage)
            throws IOException, HttpMessageNotWritableException {


        OutputStream outputStream = outputMessage.getBody();
        Properties properties = new Properties();
        properties.setProperty("person.id",person.getId().toString());
        properties.setProperty("properties",person.getName());

        properties.store(new OutputStreamWriter(outputStream),"my test");


    }




}
package com.gupao.vip.restonspringmvc.controller;

import com.gupao.vip.restonspringmvc.domain.Person;
import com.gupao.vip.restonspringmvc.domain.SsiParam;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class PersonRestController {

    @GetMapping("/person/{id}")
    public Person getPerson(@PathVariable Long id,
                            @RequestParam(required = false)String name){
        Person person = new Person();
        person.setId(id);
        person.setName(name);
        return person;
    }

    @PostMapping("/tmap")
    public Map tmap(@RequestBody SsiParam ssiParam){
        Map result = new HashMap<>();
        result.put("status","success");
        List resultList = new ArrayList<>();
        resultList.add(ssiParam);
        result.put("data",resultList);
        return result;
    }


    @PostMapping("/tmap2")
    public Map queryMap(@RequestBody Map paraMap){
        Map result = new HashMap<>();
        result.put("status","success");
        List> resultList = new ArrayList<>();
        resultList.add(paraMap);
        result.put("data",resultList);
        return result;
    }

}

 

 

 




    
    Title
    
    



12313

https://blog.csdn.net/wangyan_z/article/details/96493353

https://blog.csdn.net/a2011102394/article/details/80669119

https://www.jianshu.com/p/69c6fba08c92

 

 

 

 

 

 

 

你可能感兴趣的:(post,json,jquery,java,spring)