jiangping
2024-05-20 d78a82f4c973747fd7442b8525f6ac500e85b9dc
server/system_service/src/main/java/com/doumee/config/cloudfilter/LoginHandlerInterceptor.java
@@ -13,12 +13,17 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.util.ContentCachingRequestWrapper;
import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Enumeration;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class LoginHandlerInterceptor implements HandlerInterceptor {
@@ -69,6 +74,17 @@
                        }
                    }
                    /*try {
                        CustomHttpServletRequestWrapper requestWrapper = (CustomHttpServletRequestWrapper)request;
                        String body = requestWrapper.getBody();
                        JSONObject object = JSONObject.parseObject(body);
                        if(object!=null){
                            object.put("loginUserinfo",user);
                            requestWrapper.setBody( JSONObject.toJSONString(object));
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }*/
                } else {
                    throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
                }
@@ -78,6 +94,30 @@
        }
        return true;
    }
    private String getRequestBody(HttpServletRequest request) {
        // 实现从request获取请求体的逻辑
        String body = null;
        ServletInputStream inputStream = null;
        try {
            inputStream = request.getInputStream();
            String charset = request.getCharacterEncoding(); // 可能为null
            if (charset == null) {
                charset = "UTF-8"; // 默认编码
            }
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset));
            StringBuilder stringBuilder = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line + "\n");
            }
            body = stringBuilder.toString();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return body;
    }
    private LoginUserInfo checkLogin(String token) {
@@ -96,8 +136,87 @@
        return  user;
    }
    //    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        UserContext.removeUser();
    }
    class RSARequestWrapper extends HttpServletRequestWrapper {
        private Map<String, String[]> params = new HashMap<>();
        /**
         * 必须要实现的构造方法
         * @param request
         */
        public RSARequestWrapper(HttpServletRequest request) {
            super(request);
            //将参数表,赋予给当前的Map以便于持有request中的参数
            this.params.putAll(request.getParameterMap());
        }
        /**
         * 重载构造方法
         * @param request
         * @param extendParams
         */
        public RSARequestWrapper(HttpServletRequest request, Map<String, Object> extendParams) {
            this(request);
            //这里将扩展参数写入参数表
            addAllParameters(extendParams);
        }
        /**
         * 在获取所有的参数名,必须重写此方法,否则对象中参数值映射不上
         * @return
         */
        @SuppressWarnings({ "unchecked", "rawtypes" })
        @Override
        public Enumeration<String> getParameterNames() {
            return new Vector(params.keySet()).elements();
        }
        /**
         * 增加多个参数
         * @param otherParams 增加的多个参数
         */
        public void addAllParameters(Map<String, Object> otherParams) {
            for (Map.Entry<String, Object> entry : otherParams.entrySet()) {
                addParameter(entry.getKey(), entry.getValue());
            }
        }
        /**
         * 增加参数
         * getParameterMap()中的类型是<String,String[]>类型的,所以这里要将其value转为String[]类型
         * @param name 参数名
         * @param value 参数值
         */
        public void addParameter(String name, Object value) {
            if (value != null) {
                if (value instanceof String[]) {
                    params.put(name, (String[]) value);
                } else if (value instanceof String) {
                    params.put(name, new String[]{(String) value});
                } else {
                    params.put(name, new String[]{String.valueOf(value)});
                }
            }
        }
        @Override
        public String[] getParameterValues(String name) {
            String[] access_token_user_id = params.get("access_token_user_id");
            String[] values = params.get(name);//getValue(name);
            if (values == null || access_token_user_id==null){
                return null;
            }
            return values;
        }
        @Override
        public String getParameter(String name) {
            String[] access_token_user_id = params.get("access_token_user_id");
            String[] values = params.get(name);//getValue(name);
            if (values == null || access_token_user_id==null){
                return null;
            }
            return values[0];
        }
    }
}