springcloudgateway中获取get请求url参数问题及解决方式

/ 小问题积累 / 0 条评论 / 958浏览

1. 问题背景

在springcloudgateway过滤器中,我需要获取get请求的url参数,比如token,但是filter中的参数ServerWebExchange只能获取到ServerHttpRequest,这是spring中的http包下的子类,它没有javax.servlet包下的HttpServletRequest强大,它无法获取url中所带的get参数

2. 解决方式

所以只能先通过ServerHttpRequest获取到整个请求的url,然后从url中获取参数(自己使用工具类解析)

String wholeUrl = request.getURI().toString();
        String token = (String)UrlUtil.getParameter(wholeUrl).get("token");

我使用的url的工具类是这样的:

@Component
public class UrlUtil {

    public static Map<String, Object> getParameter(String url) {
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            final String charset = "utf-8";
            url = URLDecoder.decode(url, charset);
            if (url.indexOf('?') != -1) {
                final String contents = url.substring(url.indexOf('?') + 1);
                String[] keyValues = contents.split("&");
                for (int i = 0; i < keyValues.length; i++) {
                    String key = keyValues[i].substring(0, keyValues[i].indexOf("="));
                    String value = keyValues[i].substring(keyValues[i].indexOf("=") + 1);
                    map.put(key, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }

}