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
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