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() { // 销毁操作 } }