Данные успешно отображаются при передаче недопустимого URL-адреса (добавление обратной косой черты в URL-адресе)

Я получаю успешный ответ JSON, даже если я добавляю дополнительную обратную косую черту () в URL-адрес, как показано ниже:

https://localhost:8080///////\\\\/rest//v1///kems///stats?btv=doerrja

JSON-ответ:

[
    {
        "ID": "636803914206857000",
        "Rank": "2.401",
        "Artifact_State": "In Arbeit",
        "Count": "10"
    },
    {
        "ID": "636803920812123000",
        "Rank": "1.372",
        "Artifact_State": "Keine Änderung möglich",
        "Count": "1"
    }
]

Как обработать этот случай в Java?

случае, в котором нет ошибки? : С

aran 01.03.2019 13:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
138
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

снимок сервера

из того, что я вижу, я думаю, что он потребляет один «/» сразу и обрабатывает остальные как параметр, а затем снова рекурсивно обрабатывает каждый «/» как отдельный путь, в конечном итоге достигая действительно разумных значений, которые вы пытались передать

Мой вопрос в том, почему я получаю успешный ответ, даже если добавляю обратную косую черту (), в чем причина этого, это общее поведение? Также наблюдая, добавляю ли я несколько косых черт (/), я получаю успешный ответ. Что стоит за этим?

rajkumar singh 03.03.2019 07:48

Из Spring Doc я обнаружил, что есть одно имя класса StrictHttpFirewall, у которого есть методы, как показано ниже, которые могут быть полезны для реализации того же самого, но я не знаю, как его использовать: setAllowBackSlash (логическое значение allowBackSlash) Определяет, является ли обратная косая черта "\" или обратная косая черта в URL-кодировке "%5C" должна быть разрешена в пути или нет, и setAllowUrlEncodedSlash(boolean allowUrlEncodedSlash) Определяет, разрешена ли в пути косая черта "/", закодированная в URL-адресе "%2F". Я хочу выдать исключение, если кто-то дает дополнительную обратную косую черту или прямую косую черту в URL-адресе. Пожалуйста, помогите мне.

rajkumar singh 08.04.2019 16:14

URL-ссылка на документ Spring: docs.spring.io/spring-security/site/docs/4.2.7.RELEASE/apido‌​cs/…

rajkumar singh 08.04.2019 16:18
Ответ принят как подходящий

Наконец, ниже решение сработало для меня:

пом.xml:

<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>

SecurityConfig.java

package com.Application;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    /* 
     * Method allow to access any resource without any authentication
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }
}

UrlFilter.java

package com.component;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;

import com.daimler.datalayer.apistreamintegration.exception.BadRequest;

@Component
public class UrlFilter implements Filter {

    private static final Logger LOGGER = LoggerFactory.getLogger(UrlFilter.class);

    @Override
    public void init(FilterConfig filterChain) throws ServletException {

    }


    /* 
     * filter call to check if any double forward slash(//) present in URI before invoking Controller class 
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
            throws IOException, ServletException {

        LOGGER.info("Filtering the url");
        if (!(request instanceof HttpServletRequest)) {
            return;
        }
        String requestURI = ((HttpServletRequest) request).getRequestURI();
        boolean isInvalidUrl = requestURI.contains("//");
        if (isInvalidUrl) {
            throw new BadRequest("The request was rejected because the URL was not normalized.");
        }
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

BadRequest.java

package com.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public class BadRequest extends RuntimeException {

  private static final long serialVersionUID = 1L;


  public BadRequest(String message) {
    super(message);
  }


  public BadRequest(String message, Throwable cause) {
    super(message, cause);
  }

}

Другие вопросы по теме