gpt4 book ai didi

servlets - 如何修复 Tomcat 访问请求的资源被拒绝的问题?

转载 作者:行者123 更新时间:2023-12-02 16:44:53 24 4
gpt4 key购买 nike

更新:当 <auth-constraint> 时,代码可以正常工作。元素被完全删除。谁能解释为什么它在存在时不起作用?

我正在编写一些代码来练习保护部署描述符中的 servlet,并且我在浏览器中收到以下内容:

HTTP Status 403 - Access to the requested resource has been denied
type Status report
message Access to the requested resource has been denied
description Access to the specified resource has been forbidden.
Apache Tomcat/7.0.42

对于我做错了什么有什么想法吗?我已经对之前的帖子进行了一些搜索,似乎 Tomcat 7 中的角色名称可能已更新 - 我已经尝试过这个,但到目前为止还没有成功。 (代码如下)。

web.xml

<?xml version="1.0" ?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>
<servlet-name>CheckedServlet</servlet-name>
<servlet-class>webcert.ch05.ex0502J.CheckedServlet</servlet-class>
<security-role-ref>
<role-name>MGR</role-name>
<role-link>manager</role-link>
</security-role-ref>
</servlet>
<servlet-mapping>
<servlet-name>CheckedServlet</servlet-name>
<url-pattern>/CheckedServlet</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>CheckedServletConstraint</web-resource-name>
<url-pattern>/CheckedServlet</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>manager</role-name>
</security-role>

CheckedServlet.java

package webcert.ch05.ex0502J;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.security.*;

public class CheckedServlet extends HttpServlet{

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.write("<html><head><title>CheckedServlet</title></head><body>");

String userMessage;
Principal user = request.getUserPrincipal();
if(user == null)
userMessage = "Access denied.";
else
userMessage = "Access granted.";

out.write("<br>" + userMessage + " Principal name is " + user +
"<br>If authorized, you should see some more text below:");

if(request.isUserInRole("manager"))
out.write("<br>Here's some super secret extra text since your " +
"role is manager.");

out.write("</body></html>");
out.flush();
out.close();
}
}

最佳答案

如果您为 Web 应用程序启用安全性(就像通过将 <security-constraint> 子句添加到 web.xml 所做的那样),您还需要在 tomcat-user.xml 中定义相应的用户/角色/密码。该文件通常位于 tomcat 安装的 conf 文件夹中。以下是您可以添加到安装的 tomcat-user.xml 文件中的示例行:

<role rolename="MGR"/>  
<user password="mypassword" roles="MGR" username="user1"/>
<user password="mypassword2" roles="MGR" username="user2"/>

现在,当您访问应用程序时,您的应用程序将提示您使用 HTTP 基本身份验证输入用户 ID/密码,而不是收到状态 403 错误消息。如果您使用上述用户 ID 之一,您应该能够成功登录。

关于servlets - 如何修复 Tomcat 访问请求的资源被拒绝的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18347586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com