栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Feign-RestTemplate请求登录后获取Response Headers中的set-cookie放入下一个请求的Request Header中,以便认证通过。

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Feign-RestTemplate请求登录后获取Response Headers中的set-cookie放入下一个请求的Request Header中,以便认证通过。

我需要获取从一个restTemplate响应中收到的cookie,并将其传递给另一个请求。

整体思路如下:

1.用RestTemplate请求第三方服务的登录接口获取到对应的ResponseEntity。

2.从ResponseEntity中获取HttpHeaders,从HttpHeaders中获取Set-cookie。
3.将Set-cookie值放进本地map中。
4.在下一个请求的时候将cookie值放进Request header中。

具体代码如下:

@Slf4j
@Configuration
public class FeignOAuth2RequestInterceptor implements RequestInterceptor {

    @Resource
    private xxxxLoginClient xxxxxLoginClient;

    private Map xxxxLogincookieMap = Maps.newHashMap();

    private final String XXX_LOGIN_cookie = "xxxx_login_cookie";

    private final String HEADER_cookie_NAME = "cookie";

    private final String XXX_LOGIN_URL = "/user/login";

    @Override
    public void apply(RequestTemplate requestTemplate) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

        String feignTargetUrl = requestTemplate.feignTarget().url();
        cookie[] cookies = request.getcookies();
        String requestURI = request.getRequestURI();

        boolean urlNotBlank = StringUtils.isNotBlank(requestURI);
        boolean isxxxxServer = StringUtils.equalsIgnoreCase(feignTargetUrl, "http://localhost:9090/xxxx");

        if (urlNotBlank && isxxxxServer) {

            String loginUrl = "http://localhost:9090/xxxx" + XXX_LOGIN_URL + "?username=zclh&password=123456";
            ResponseEntity postResult = RestTemplateUtils.post(loginUrl, XxxResult.class);

            HttpHeaders headers = postResult.getHeaders();

            List cookieList = headers.get("Set-cookie");

            if (CollectionUtils.isNotEmpty(cookieList)) {
                String cookie = cookieList.get(0);
                xxxLogincookieMap.put(XXX_LOGIN_cookie, cookie);
            }
        }

        log.info("cookies:{}", JSONObject.toJSONString(cookies));

        String accessToken = request == null ? StringUtils.EMPTY : request.getHeader(HttpHeaders.AUTHORIZATION);
        log.info("Feign拦截器,拦截到Feign的Http请求发送,从当前Request的Header中获取AUTHORIZATION值为:{}", accessToken);
        requestTemplate.header(HttpHeaders.AUTHORIZATION, accessToken);
        requestTemplate.header(HEADER_cookie_NAME, xxxLogincookieMap.get(XXX_LOGIN_cookie));
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号