大家好,
我按照以下链接中的步骤使用 Tomcat 完成基本身份验证,并成功实现了结果:
http://www.avajava.com/tutorials/lessons/how-do-i-use-basic-authentication-with-tomcat.html?page=1
我随后在我正在处理的现有项目上完成了同样的工作,但不幸的是,当我尝试从浏览器或通过 Java 程序访问 servlet 时收到错误 403(禁止访问指定的资源) . 错误 403 表示用户已通过身份验证但未获得授权。
我对该问题进行了深入研究,但我仍然被困在那里,因此感谢您的帮助。
这是 tomcat-user.xml:
<role rolename="tomee-admin"/>
<role rolename="adapter-role"/>
<user password="tomee" roles="tomee-admin,manager-gui" username="tomee"/>
<user username="adapter" password="adapterpwd" role="adapter-role"/>
她是我的 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>sbee-adapter</display-name>
<security-constraint>
<web-resource-collection>
<web-resource-name>OZZ-Adapter</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>OZZ-Adapter</web-resource-name>
<url-pattern>/API</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>adapter-role</role-name>
</auth-constraint>
</security-constraint>
<servlet>
<description></description>
<servlet-name>IDP</servlet-name>
<servlet-class>com.xxxx.ozz.adapter.ztee.IDP</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IDP</servlet-name>
<url-pattern>/IDP</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>API</display-name>
<servlet-name>API</servlet-name>
<servlet-class>com.xxxx.ozz.adapter.ztee.API</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>API</servlet-name>
<url-pattern>/API</url-pattern>
</servlet-mapping>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
我的Java代码:
HttpURLConnection con1 = (HttpURLConnection) urlSBEE_API.openConnection();
con1.setRequestMethod("POST");
String basis_encode = Base64.getEncoder().encodeToString(("adapter" + ":" + "adapterpwd").getBytes("UTF-8"));
con1.setRequestProperty("Authorization", "Basic " + basis_encode);
responseCode = con1.getResponseCode();
System.out.println("Response code====== "+responseCode);
responseCode 值为 403。
我确保在 web.xml 中包含
<auth-method>BASIC</auth-method>
正如我在网上看到的很多建议这样做。
另一方面,如果在 java 代码中我输入了错误的用户名和密码,那么我会收到错误 401,这是正确的,因为这意味着用户未通过身份验证。
我清除了浏览器缓存并退休了。还是一样的问题。
问题可能与代理设置有关???
我的windows代理设置如下:使用自动配置脚本,地址:http://proxy:8083/
我也尝试了以下代码:
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("Proxy"),
Integer.parseInt("8083"));
HttpURLConnection con1 = (HttpURLConnection) urlDistribution.openConnection(proxy);
con1.setRequestMethod("POST");
String basis_encode = Base64.getEncoder().encodeToString(("adapter" + ":" + "adapterpwd").getBytes("UTF-8"));
con1.setRequestProperty("Authorization", "Basic " + basis_encode);
responseCode = con1.getResponseCode();
System.out.println("Response code====== "+responseCode);
我尝试在 HttpURLConnection con1 之前包含以下内容:
System.setProperty("http.nonProxyHosts", "<MY_LOCAL_HOST>");
但仍然没有运气。
谢谢!
我只是在 tomcat-user.xml 中替换:role="adapter-role"
和
角色=“适配器角色”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句