当前位置: 首页 > 知识库问答 >
问题:

CQ5:403当调用Post servlet时发生禁止

锺英彦
2023-03-14

嗨,我正在使用这段代码为我的CQ5示例应用程序创建一个Post方法。

package com.adobe.cq.sling;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.rmi.ServerException;
import java.util.Dictionary;

import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.commons.osgi.OsgiUtil;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.felix.scr.annotations.Reference;
import org.osgi.service.component.ComponentContext;
import javax.jcr.Session;
import javax.jcr.Node; 
import org.json.simple.JSONObject;
import java.util.UUID;

@SlingServlet(paths="/bin/mySearchServlet", methods = "POST", metatype=true)
public class HandleClaim extends org.apache.sling.api.servlets.SlingAllMethodsServlet {
     private static final long serialVersionUID = 2598426539166789515L;


     @Override
     protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServerException, IOException {

      try
      {
         //Get the submitted form data that is sent from the
              //CQ web page  
          String id = UUID.randomUUID().toString();
          String firstName = request.getParameter("firstName");
          String lastName = request.getParameter("lastName");
          String address = request.getParameter("address");
          String cat = request.getParameter("cat");
          String state = request.getParameter("state");
          String details = request.getParameter("details");
          String date = request.getParameter("date"); 
          String city = request.getParameter("city"); 

          //Encode the submitted form data to JSON
          JSONObject obj=new JSONObject();
          obj.put("id",id);
          obj.put("firstname",firstName);
          obj.put("lastname",lastName);
          obj.put("address",address);
          obj.put("cat",cat);
          obj.put("state",state);
          obj.put("details",details);
          obj.put("date",date);
          obj.put("city",city);

             //Get the JSON formatted data    
          String jsonData = obj.toJSONString();

             //Return the JSON formatted data
         response.getWriter().write(jsonData);
      }
      catch(Exception e)
      {
          e.printStackTrace();
      }
    }
}

它可以处理GET请求。但是对于POST(doPost)请求,我重新引用了一条消息:403禁止。我应该做些什么来解决这个问题?

共有1个答案

李辉
2023-03-14

如果从内部客户机调用方法(例如:应用程序中的jsp文件、ajax或Servlets),则永远不会发生此问题。但是,如果您从外部客户端调用它(另一个网站或REST客户端插件...)CQ安全过滤器将被触发来阻止您的操作,然后返回403错误来删除此操作,请按照以下步骤操作:

1/http://localhost:4502/system/console/configMgr
2/搜索“Apache Sling Referrer filter”
3/从筛选器中删除POST方法。然后可以在任何地方调用POST方法。

 类似资料:
  • 我的问题与此类似:CQ5:403禁止在调用Post servlet时发生,但在AEM6.1中 根据以上主题的公认答案,我必须从Apache Sling Referrer过滤器中删除POST。我想知道这个动作是否对我的系统有害?是否有更好的方法来解决这个问题?

  • 我正在尝试使用SpringBoot使用REST API。现在,我已经测试了来自Postman的api,看起来一切工作都很好,但是当我通过Postman调用api时。我得到一个403禁止错误。API以JSON格式返回响应,我通过POSTMAN进行了测试,结果似乎一切正常。 日志:-

  • 我想暂时禁用整个应用程序的Spring Security性,但我总是被403禁止 删除控制器中的@PreAuthorize注释不会给出任何结果。未使用此注释标记的endpoint也会丢弃我 403 禁止 我不需要基本身份验证 我不需要身份验证 我的Spring Security配置:(/,/api/**,/**,**不工作,我总是得到403禁止) 我的一个控制者:

  • 更新:似乎用户代理并不是某些主机提供HTML所需的唯一标头,我还必须添加“accepts”标头,最终这为我解决了许多主机的问题: 我试图使用Guzzle来检索一些网站,但收到了403禁止错误(当它们在浏览器中工作正常时),我怀疑这是由于主机禁止了非标准的用户代理。为了解决这个问题,我试图在Guzzle中设置用户代理来模仿浏览器,但是我找不到任何有效的方法。我可以浏览网站,也可以使用WGET和CUR

  • 我想在我的Java应用程序中访问任何用户的日历。 在https://portal.Azure.com中,我创建了一个Azure Active Directory:aniketorg123 然后我在里面创建了一个应用程序:aniketorgapp1 为什么我会被禁止使用403?

  • 问题内容: 我试图通过从slide_images文件夹中获取所有图像名称并将其附加到来动态地动态显示滑块图像。 问题答案: 最后,我通过使用json解决了这个问题。 首先,我创建getimages.php文件并读取该文件中的目录,并获取所有图像名称并将该名称存储在数组中。 getimages.php 从要动态加载图像的页面调用getimages.php。 index.php 这对我来说是完美的。