feat: 测试接入wps
parent
631b86fa60
commit
78cd3b3828
|
|
@ -0,0 +1,121 @@
|
||||||
|
package org.qinan.safetyeval.adapter.config;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.Ordered;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.filter.OncePerRequestFilter;
|
||||||
|
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Configuration
|
||||||
|
public class WpsFilter extends OncePerRequestFilter {
|
||||||
|
|
||||||
|
private static final String WPS_TOKEN_HEADER = "X-Weboffice-Token";
|
||||||
|
private static final String AUTH_TOKEN_HEADER = "token";
|
||||||
|
private static final String AUTH_TOKEN_PREFIX = "jjb-saas-auth:oauth:";
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public FilterRegistrationBean<WpsFilter> wpsFilterRegistration() {
|
||||||
|
FilterRegistrationBean<WpsFilter> bean = new FilterRegistrationBean<>();
|
||||||
|
bean.setFilter(this);
|
||||||
|
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
|
||||||
|
bean.addUrlPatterns("/safetyEval-h5/wsp/*");
|
||||||
|
bean.setName("wpsFilter");
|
||||||
|
return bean;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean shouldNotFilter(HttpServletRequest request) {
|
||||||
|
String uri = request.getRequestURI();
|
||||||
|
return uri == null || !uri.contains("/safetyEval-h5/wsp/");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
|
||||||
|
throws ServletException, IOException {
|
||||||
|
String wpsToken = request.getHeader(WPS_TOKEN_HEADER);
|
||||||
|
if (!StringUtils.hasText(wpsToken)) {
|
||||||
|
log.warn("WPS callback missing {}: {}", WPS_TOKEN_HEADER, request.getRequestURI());
|
||||||
|
filterChain.doFilter(request, response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String token = wpsToken.trim();
|
||||||
|
if (!token.startsWith(AUTH_TOKEN_PREFIX)) {
|
||||||
|
token = AUTH_TOKEN_PREFIX + token;
|
||||||
|
}
|
||||||
|
|
||||||
|
MutableHeaderRequestWrapper wrapped = new MutableHeaderRequestWrapper(request);
|
||||||
|
wrapped.putHeader(AUTH_TOKEN_HEADER, token);
|
||||||
|
log.info("WPS token mapped to header {} for {}", AUTH_TOKEN_HEADER, request.getRequestURI());
|
||||||
|
filterChain.doFilter(wrapped, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
static final class MutableHeaderRequestWrapper extends HttpServletRequestWrapper {
|
||||||
|
|
||||||
|
private final Map<String, String> extraHeaders = new HashMap<>();
|
||||||
|
|
||||||
|
MutableHeaderRequestWrapper(HttpServletRequest request) {
|
||||||
|
super(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
void putHeader(String name, String value) {
|
||||||
|
extraHeaders.put(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHeader(String name) {
|
||||||
|
String value = findExtra(name);
|
||||||
|
return value != null ? value : super.getHeader(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Enumeration<String> getHeaders(String name) {
|
||||||
|
String value = findExtra(name);
|
||||||
|
if (value != null) {
|
||||||
|
return Collections.enumeration(Collections.singletonList(value));
|
||||||
|
}
|
||||||
|
return super.getHeaders(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Enumeration<String> getHeaderNames() {
|
||||||
|
Set<String> names = new HashSet<>();
|
||||||
|
Enumeration<String> original = super.getHeaderNames();
|
||||||
|
while (original.hasMoreElements()) {
|
||||||
|
names.add(original.nextElement());
|
||||||
|
}
|
||||||
|
names.addAll(extraHeaders.keySet());
|
||||||
|
return Collections.enumeration(names);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String findExtra(String name) {
|
||||||
|
if (name == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, String> entry : extraHeaders.entrySet()) {
|
||||||
|
if (entry.getKey().equalsIgnoreCase(name)) {
|
||||||
|
return entry.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue