The redirection is followed automatically if the request is a GET request (seethis answer). To make it happen on POST requests, one option might be to use a different request factory, likeHttpComponentsClientHttpRequestFactory
, and set it to use anHttpClient
with the required settings to follow the redirect (seeLaxRedirectStrategy):
final RestTemplate restTemplate = new RestTemplate();
final HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
final HttpClient httpClient = HttpClientBuilder.create()
.setRedirectStrategy(new LaxRedirectStrategy())
.build();
factory.setHttpClient(httpClient);
restTemplate.setRequestFactory(factory);
I haven’t tested, but this should work.
https://stackoverflow.com/questions/32392634/spring-resttemplate-redirect-302
Spring的RestTemplate自动重定向,如何拿到重定向后的地址?
第一种解决方案
既然知道了spring会设置自动重定向,那么要禁止自动重定向就很简单了。我们写一个类来继承SimpleClientHttpRequestFactory,然后复写prepareConnection方法,把该属性设置为false即可,代码如下:
public class NoRedirectSimpleClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException {
super.prepareConnection(connection, httpMethod);
connection.setInstanceFollowRedirects(false);
}
}
那么该如何在创建的时候使用这个ClientHttpRequestFactory 呢,一种简单的方法直接在创建RestTemplate的时候传入参数即可
private static final RestTemplate REST_TEMPLATE =服务器托管网 new RestTemplate(new NoRedirectSimpleClientHttpRequestFactory());
这样的话就返回的结果就是302了,可以在header中的”Location”拿到重定向的地址,再使用另外的RestTemplate来请求下载就可以了。但是spring既然提供了功能强大的RestTemplateBuilder,我们就要学会使用它,如下,可以顺便设置下超时时间之类的属性:
private static final RestTemplate REST_TEMPLATE = new RestTempl服务器托管网ateBuilder()
.requestFactory(NoRedirectSimpleClientHttpRequestFactory.class)
.setConnectTimeout(Duration.ofMillis(3000))
.setConnectTimeout(Duration.ofMillis(5000))
.build();
feign 怎么处理302的响应?【测试未通过,copy过来留一个思路】
1.如果直接使用Feign,可以通过修改Options来实现是否自动跳转,默认是true,也就是自动重定向。
Request.Options customerOptions = new Request.Options(10_000, 20_000, false);
Feign.builder().options(customerOptions).build();
2.如果使用Spring的open-feign,则可以通过修改配置文件来实现。
feign:
httpclient:
follow-redirects: false
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
想要做好权限管理,并不是一件容易的事情,既要考虑授权的粒度保证安全,也要考虑授权的方式足够便捷。之前有篇文章权限管理系统设计介绍过我们的权限设计,整体上是采用RBAC+资源隔离的方式,仅对小部分非常敏感的数据再通过对象授权的方式做管控。在实际的使用中也验证了这…