Java:Access password protected URL

13 篇文章 0 订阅
4 篇文章 0 订阅

问题描述

当访问要密码验证的网址的时候,通常会弹出一个对话框,指示用户输入用户名和密码,那么用Java代码去读取URL对应的内容时,如何设置好登陆凭证?

解决方案

        URL url = new URL("http://user:password@10.10.12.72:8080/data/retrieve?rid=109000&pid=community");
        URLConnection urlConnection = url.openConnection();

        if (url.getUserInfo() != null) {
            System.out.println(url.getUserInfo());
            String basicAuth = "Basic " + new String(new Base64().encode(url.getUserInfo().getBytes()));
            urlConnection.setRequestProperty("Authorization", basicAuth);
        }
        InputStream in = urlConnection.getInputStream();
        Scanner cin = new Scanner(in);
        while (cin.hasNextLine()) {
            System.out.println(cin.nextLine());
        }

More

当在Linux下,还可以用curl命令,设置认证过程

curl -X POST -vu android-bookmarks:123456 http://localhost:8080/oauth/token -H "Accept: application/json" -d "password=password&username=jlong&grant_type=password&scope=write&client_secret=123456&client_id=android-bookmarks"
curl -v POST http://127.0.0.1:8080/tags --data "tags=cows,dogs"  -H "Authorization: Bearer 66953496-fc5b-44d0-9210-b0521863ffcb"
Java中,当你使用Feign客户端库(通常用于构建API客户端和服务发现)去调用一个需要身份验证的RESTful API接口时,可能会遇到`"Full authentication is required to access this resource"`这样的错误。这个错误提示意味着服务器要求完整的身份验证信息才能提供资源服务。 Feign默认并不处理HTTP基本认证(Basic Authentication)或其他类型的认证,你需要明确配置Feign客户端去处理这种需求。通常,这涉及以下几个步骤: 1. **添加依赖**:确保在你的项目中包含了Feign和Feign-Jackson等相关依赖。 2. **创建Feign接口**:为需要的身份验证API创建一个Feign接口,并显式指定认证类型和相关的认证信息。 ```java @FeignClient(name = "your-service", url = "https://your-api-url") public interface AuthenticatedService { @RequestLine("GET /protected-resource") @Headers({"Authorization: Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes(Charset.forName("UTF-8")))}) String getProtectedResource(@Param("username") String username, @Param("password") String password); } ``` 在这个例子中,`@Headers`注解添加了基础认证头,`Base64.getEncoder().encodeToString()`将用户名和密码编码成Base64格式。 3. **设置认证配置**:如果你的应用使用Spring Boot,可以配置Feign全局的认证机制,例如通过`feign.codec.http.client.HttpURLConnectionClient`。 ```java @Configuration public class FeignConfiguration { @Bean public HttpURLConnectionClient httpClient() { return new HttpURLConnectionClient(new ApacheHttpClient()); } } ``` 然后,在你的应用启动时,记得设置正确的用户凭证(如使用环境变量或配置文件存储)。 **相关问题--:** 1. Feign如何处理其他类型的认证,比如OAuth2? 2. 如果API支持多种认证方式,如何在Feign中切换不同的认证策略? 3. 如何在Feign请求中动态传递认证凭据,而不是硬编码在接口中?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值