首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Tomcat 8中使用基本身份验证时出错403

在Tomcat 8中使用基本身份验证时出错403
EN

Stack Overflow用户
提问于 2017-12-08 15:59:03
回答 1查看 1.2K关注 0票数 0

大家好,

我按照以下链接中的步骤使用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:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<?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代码:

代码语言:javascript
复制
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中包括

代码语言:javascript
复制
<auth-method>BASIC</auth-method>

正如我在网上看到的那样,有很多建议要这样做。

另一方面,如果在java代码中输入了错误的用户名和pwd,则会得到错误401,这是正确的,因为它意味着用户没有经过身份验证。

我清除了浏览器缓存并退休了。还是一样的问题。

这个问题是否与代理设置有关?

我的windows代理设置如下:使用自动配置脚本,地址:http://proxy:8083/

我还尝试了以下代码:

代码语言:javascript
复制
     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之前包括以下内容:

代码语言:javascript
复制
System.setProperty("http.nonProxyHosts", "<MY_LOCAL_HOST>");

但还是没有运气。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-04 16:18:21

解决办法:

我刚刚在tomcat-user.xml: role=“适配器-角色”中替换

使用

roles="adapter-role“

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47717914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档