ludc
2023-09-15 b89fc7c55c756e71d5c5133a799430c294059be1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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() {
        // 销毁操作
    }
 
}