Quiero hacer una llamada ajax usando $.POST. Pero estoy consiguiendo el error 403. Pero CONSEGUIR funciona perfectamente bien. Mi código es:

var url = "/xyz/abc/subscribe?name="+name;
$.post(url, function(data){
    alert(data);
});

El controlador de código es :

@RequestMapping(value = "/xyz/abc/subscribe", method = RequestMethod.POST)
public @ResponseBody
    String subscribe(@RequestParam("name") String name)
        throws Exception {
    String message = "TESTING";
    return message;
}

Pero obtengo un error 403.

¿Tienes algún error en la aplicación de los registros del servidor?
No…no he podido encontrar ningún error.
Estoy recibiendo en los registros: org.springframework.de seguridad.acceso.AccessDeniedException: Acceso denegado
403 significa que el servidor puede autenticar correctamente al usuario, pero que el usuario no tiene los derechos adecuados para realizar la operación seleccionada. Está usted usando Spring security? Si es así, después de la configuración
Tuve el error similar y todavía no se ha resuelto stackoverflow.com/questions/25800657/…

OriginalEl autor user3729782 | 2014-08-06

4 Comentarios

  1. 64

    Utilizando la Primavera de de Seguridad con la configuración de Java, protección CSRF está habilitado de forma predeterminada.
    En este contexto, si usted hace una petición Ajax a un extremo REST usando el método POST, usted recibirá un token csrf falta de error.

    Para solucionar esto, hay dos opciones:

    Opción 1: Deshabilitar csrf

    @Override
    protected void configure (HttpSecurity http) throws Exception {
        http.csrf().disable();
    }

    Opción 2: Agregar csrf a la petición ajax. Ver aquí

    Impresionante! Gracias hombre!!!
    @Override de configure asume el mando es una subclase de lo tipo/clase?
    Un sublcass de org.springframework.de seguridad.config.la anotación.web.de configuración.WebSecurityConfigurerAdapter
    A debe tener vistazo a esto:- 16.3 Cuando el uso de protección CSRF Cuándo se debe usar protección CSRF? Nuestra recomendación es utilizar protección CSRF para cualquier petición que podría ser procesado por un navegador de los usuarios normales. Si sólo va a crear un servicio que es utilizado por los no-clientes del navegador, es probable que se desea deshabilitar la protección CSRF. SRC: docs.de la primavera.io/primavera-seguridad/sitio/docs/actual/referencia/html/…
    Vale la pena resaltar que la Opción 1. no se recomienda ya que puede ser riesgoso.

    OriginalEl autor Emiliano Schiano

  2. 8

    Es posible que desee añadir el token csrf a la solicitud.

    Obtener el token con JSTL debería ser bastante sencillo. Si usted está usando Thymeleaf, aquí es cómo obtenerlo.

    <script th:inline="javascript">
        /*<![CDATA[*/
        var _csrf_token = /*[[${_csrf.token}]]*/ '';
        var _csrf_param_name = /*[[${_csrf.parameterName}]]*/ '';
        /*]]>*/
    </script>

    A continuación, agregarlo a su solicitud:

    var requestData = {
        'paramA': paramA,
        'paramB': paramB,
    };
    requestData[_csrf_param_name] = _csrf_token; //Adds the token
    
    $.ajax({
        type: 'POST',
        url: '...your url...',
        data: requestData,
        ...
    });

    Si todo va bien, la solicitud debe incluir algo como
    _csrf:1556bced-b323-4a23-ba1d-5d15428d29fa (el token csrf) y obtendrá un 200 en lugar de un 403.

    OriginalEl autor izilotti

  3. 0

    Este es un ejemplo de sin deshabilitar CSRF.

    Paso 1: En su encabezado agregar CSRF como este

    <meta th:name="${_csrf.parameterName}" th:content="${_csrf.token}"/>

    Paso 2: Realizar llamadas con token

    $( "#create_something" ).click(function() {
    
      var token = $("meta[name='_csrf']").attr("content");
    
      $.ajax({
        url : '/xxxxxxxxxxxx', //url to make request
        headers: {"X-CSRF-TOKEN": token}, //send CSRF token in header
        type : 'POST',
        success : function(result) {
            alert(result);
        }
      })
    });

    OriginalEl autor VK321

  4. -3

    Usted está tratando de hacer una petición POST a un extremo REST usted no está autorizado. Su sesión ha de ser válido, o el usuario que está ingresando como no tiene la autoridad como @geoand ya se señaló.

    OriginalEl autor Patrick Grimard

Dejar respuesta

Please enter your comment!
Please enter your name here