package com.vci.ubcs.code.config;
|
|
import com.vci.ubcs.code.service.IPasswordFreeLoginService;
|
import com.vci.ubcs.code.service.impl.PasswordFreeLoginServiceImpl;
|
import lombok.SneakyThrows;
|
import org.apache.http.auth.AuthenticationException;
|
import org.springblade.core.redis.cache.BladeRedis;
|
import org.springblade.core.tool.utils.Func;
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import javax.servlet.*;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import javax.xml.namespace.QName;
|
import javax.xml.ws.handler.MessageContext;
|
import javax.xml.ws.handler.soap.SOAPHandler;
|
import javax.xml.ws.handler.soap.SOAPMessageContext;
|
import javax.xml.soap.SOAPException;
|
import javax.xml.soap.SOAPHeader;
|
import javax.xml.soap.SOAPMessage;
|
import java.io.IOException;
|
import java.util.Set;
|
|
/**
|
* webservice接口拦截器
|
* @author ludc
|
* @date 2023/9/12 11:16
|
*/
|
public class WebServiceTokenFilter implements Filter {
|
|
@Autowired
|
private IPasswordFreeLoginService passwordFreeLoginService;
|
@Autowired
|
private BladeRedis bladeRedis;
|
|
@Override
|
public void init(FilterConfig filterConfig) throws ServletException {
|
// 初始化操作
|
}
|
|
@SneakyThrows
|
@Override
|
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException, IOException {
|
HttpServletRequest request = (HeaderMapRequestWrapper) servletRequest;
|
HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(request);
|
HttpServletResponse response = (HttpServletResponse) servletResponse;
|
|
// 在请求进来之后获取token
|
String token = getUserToken(request); // 获取用户的token
|
|
// 将token设置到header中
|
requestWrapper.setHeader("Blade-Auth", token);
|
requestWrapper.setHeader("Authorization","Basic c3dvcmQ6c3dvcmRfc2VjcmV0");
|
|
filterChain.doFilter(request, response);
|
}
|
|
/**
|
* 缓存中获取token
|
* @param request
|
* @return
|
*/
|
private String getUserToken(HttpServletRequest request) throws AuthenticationException {
|
String ipAddr = request.getRemoteAddr();
|
String token = Func.toStr(bladeRedis.get(PasswordFreeLoginServiceImpl.PWD_FREE_LOGIN_TOKEN + ipAddr));
|
if(Func.isBlank(token)){
|
throw new AuthenticationException("鉴权信息已过期,或缓存中未找到token!");
|
}
|
return token;
|
}
|
|
@Override
|
public void destroy() {
|
// 销毁操作
|
}
|
|
}
|