Servlets URL.openConnection()方法不适用于WebSphere Liberty概要文件
我正在使用Servlets URL.openConnection()方法不适用于WebSphere Liberty概要文件,servlets,jax-rs,httpurlconnection,httpserver,websphere-liberty,Servlets,Jax Rs,Httpurlconnection,Httpserver,Websphere Liberty,我正在使用javax.servlet.http.HttpServlet创建和初始化我的服务器 我正在IBMWebSphereLiberty服务器上部署servlet 当我尝试执行任何REST调用时,我收到401未经授权的错误 HttpURLConnection conn = null; String url = "https://someurl/getdata"; try { conn = (HttpURLConnection) url.openConnection
javax.servlet.http.HttpServlet
创建和初始化我的服务器
我正在IBMWebSphereLiberty服务器上部署servlet
当我尝试执行任何REST调用时,我收到401未经授权的错误
HttpURLConnection conn = null;
String url = "https://someurl/getdata";
try {
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
String accessToken = this.token;
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded;charset=utf-8");
conn.setRequestProperty("Accept", "application/json;charset=utf-8");
conn.setRequestProperty("X-Auth-Token", "bmXaj83sgo4"); } catch (Exception e) {
e.printStackTrace();
}
抛出NullPointerException
,或在以下行返回401未授权
错误:
conn = (HttpURLConnection) url.openConnection();
但我可以通过RestClient或使用简单的Java项目访问相同的URL
我的web.xml
如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>SampleTesting</display-name>
<servlet>
<servlet-name>Monkey Server</servlet-name>
<servlet-class>com.sample.testing.basic.BasicMonkeyServer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
抽样测试
猴子服务器
com.sample.testing.basic.BasicMonkeyServer
1.
值得一提的是,这段代码(修改后可以正常工作)运行良好,并在8557上的servlet中验证为基本的受身份验证保护的资源
您的代码或服务可能会有所不同。张贴完整的代码 值得一提的是,这段代码(修改后可以正常工作)运行良好,并在8557上的servlet中验证为基本的受身份验证保护的资源
您的代码或服务可能会有所不同。张贴完整的代码 问题在于我试图访问的URL和我使用的凭据。
尝试使用不同的凭据,效果良好。问题在于我尝试访问的URL和使用的凭据。
使用不同的凭据进行了尝试,效果良好。编译错误
编译代码时必须有编译错误,因为url
是一个,并且没有openConnection()
方法:
String url = "https://someurl/getdata";
conn = (HttpURLConnection) url.openConnection();
尝试使用,而不是:
如果您有权访问您试图请求的资源,并且您的访问令牌有效,那么您的代码应该可以正常工作
JAX-RS客户端API
我建议您不要使用,而是使用,这是在Java中使用REST API的标准方式:
Client client = ClientBuilder.newClient();
String data = client.target("https://someurl/getdata")
.request(MediaType.APPLICATION_FORM_URLENCODED)
.get(String.class);
要执行身份验证,请创建:
并将其注册到您的:
从长远来看,使用JAX-RS客户端API将为您提供更大的灵活性。编译错误
编译代码时必须有编译错误,因为url
是一个,并且没有openConnection()
方法:
String url = "https://someurl/getdata";
conn = (HttpURLConnection) url.openConnection();
尝试使用,而不是:
如果您有权访问您试图请求的资源,并且您的访问令牌有效,那么您的代码应该可以正常工作
JAX-RS客户端API
我建议您不要使用,而是使用,这是在Java中使用REST API的标准方式:
Client client = ClientBuilder.newClient();
String data = client.target("https://someurl/getdata")
.request(MediaType.APPLICATION_FORM_URLENCODED)
.get(String.class);
要执行身份验证,请创建:
并将其注册到您的:
从长远来看,使用JAX-RS客户端API将给您带来更大的灵活性。问题中的代码不会编译给定的url,因为url是字符串而不是java.net.url。如果您提供了实际的代码和异常,可能会有所帮助。当你拿到401时,你有没有检查过你是否有权限?访问的资源是否受到保护?您是否提供了任何凭据?@Alasdair:谢谢您的回复。是的,你说得对。我正在将URL从字符串转换为java.net.URL。问题中的代码不会编译给定的URL是字符串而不是java.net.URL。如果您提供了实际的代码和异常,可能会有所帮助。当你拿到401时,你有没有检查过你是否有权限?访问的资源是否受到保护?您是否提供了任何凭据?@Alasdair:谢谢您的回复。是的,你说得对。我正在将URL从字符串转换为java.net.URL。谢谢。是的,代码运行良好。我尝试了不同的凭据和URL,它正在工作。谢谢。是的,代码运行良好。我尝试了不同的凭据和URL,它正在工作。
Client client = ClientBuilder.newClient().register(new Authenticator("your-token"));