feat: 测试接入wps
parent
a1c58b525f
commit
0cda1b471b
|
|
@ -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