CQ5: 403 Forbidden when calling the Post servlet

Hi, I am using this code to create a Post method for my CQ5 application.

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();
      }
    }
}

It works fine with a GET request. But for a POST request (doPost), I got the message: 403 Forbidden. What should I do to solve this problem?

+4
source share
4 answers

. (: jsp, ajax , ). , ( - REST...) CQ- , , 403, , :

1/http://localhost:4502/system/console/configMgr
2/ " Apache Sling"
3/ POST . POST .

+7

http://sling.apache.org/documentation/the-sling-engine/servlets.html, sling.servlet.paths , (servletresolver.paths) SlingServletResolver. /system/console/configMgr/org.apache.sling.servlets.resolver.SlingServletResolver.

, /bin/mySearchServlet CQ 403. , ( , ), , .

, , , , .

+5

, . .

PFB . / .

  • -.

    @Component (       instant = true, metatype = true, label = " "       description = " " ) @ ({@   @Property (name = "sling.servlet.paths", value = { "/bin/myServlet" }),   @Property (name = "sling.servlet.methods", value = { "POST" }) })

  • /bin/myServlet org.apache.sling.servlets.resolver.SlingServletResolver.

  • - - html, -, 403 . . . .

  • CQ: - AJAX , POST AJAX . forward.jsp, .

    ValueMap = ResourceUtil.getValueMap();   String path = properties.get( "customRedirectPath", ""); // =/bin/myServlet   FormsHelper.setForwardPath(slingRequest, path);   FormsHelper.setRedirectToReferrer(, );

AJAX: -

 argsObject = {
            oServiceUrl: "/bin/myServlet",
            oAjaxFormat: "html",
            oDataForAjax: $thisForm.serialize(),
            oAjaxCommMethod: "POST",
            oSuccessCallback: onSubmitSuccessCallback,
            oErrorCallback: onSubmitErrorCallback
            }

I can execute my servlet as soon as this POST call is completed, and I get a valid response as desired.

Let me know if these steps help.

+2
source

Source: https://habr.com/ru/post/1534556/


All Articles