Nano Hash - криптовалюты, майнинг, программирование

UrlEncodedSlash заблокирован HttpFirewall (Grails 3.3.0.RC1; Spring-security-core 3.2.0.M1)

Я нахожу эти ошибки в своих журналах:

org.springframework.security.web.firewall.RequestRejectedException: The requestURI cannot contain encoded slash. Got /;lm=1488887514;m=js;asset=delayedElements%2Fsnippet;tf;ucm=353df4434086482d9d1d7b89758e156e/
        at org.springframework.security.web.firewall.DefaultHttpFirewall.getFirewalledRequest(DefaultHttpFirewall.java:56)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:193)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
...

И я нашел это решение, которое, вероятно, работает в Spring Boot. Spring security DefaultHttpFirewall — requestURI не может содержать закодированную косую черту

Могу ли я и как применить это в Grails? Заранее большое спасибо!

РЕДАКТИРОВАТЬ 1:

Вот как я реализовал предложение Судхира:

Здесь я создал новый класс:

Здесь я создал новый класс:

Вот как выглядит реализация:

package fnx.security;

import org.springframework.security.web.firewall.DefaultHttpFirewall;

public class CustomHttpFirewall extends DefaultHttpFirewall {
    CustomHttpFirewall() {
        boolean allowUrlEncodedSlash = true;
    }
}

А вот как он включается в application.yml:

 grails:
     plugin:
        springsecurity:
            httpFirewallBeanClass: 'fnx.security.CustomHttpFirewall'

Что-то отсутствует или неправильно?


  • Вы пытались отладить его в отладчике, чтобы убедиться, что ваш собственный брандмауэр используется, а значение allowUrlEncodedSlash равно true? 20.07.2017
  • Я пробовал, но не знаю, где установить точку останова и где посмотреть, используется ли CustomHttpFirewall. 21.07.2017
  • Если я устанавливаю точку останова в классе CustomHttpFirewall, она, по крайней мере, на этом не останавливается. 21.07.2017
  • Это означает, что ваш пользовательский класс не используется. поставьте точку останова в doWithSpring SpringSecurityCoreGrailsPlugin -- github.com/grails-plugins/grails-spring-security-core/blob/ 21.07.2017
  • Наконец-то я смог вызвать класс. Теперь точка останова срабатывает каждый раз, когда я развертываю военный файл (или запускаю проект) во время конфигурации безопасности spring. Однако журнал ошибок по-прежнему показывает те же ошибки... 25.07.2017
  • О, у меня закончились предложения, я должен попытаться воспроизвести проблему локально, а затем исследовать исправление. 25.07.2017
  • подождите, @kloker не делайте логическое значение allowUrlEncodedSlash = true; а просто = allowUrlEncodedSlash = true; удалите логическое значение, вы не хотите определять локальную переменную, вы хотите установить значение переменной, которое определено в родительском классе.. см. мой пример не имеет объявленной локальной переменной 25.07.2017
  • Сначала у меня это было без логического значения, но затем проект не скомпилировался... 25.07.2017
  • Какую ошибку вы получаете? -- должно компилироваться нормально.. 25.07.2017

Ответы:


1

По умолчанию подключаемый модуль ядра безопасности spring использует DefaultHttpFirewall, вы можете создать подкласс, расширив DefaultHttpFirewall и установив для свойства allowUrlEncodedSlash значение true из конструктора.

 CustomHttpFirewall extends DefaultHttpFirewall {
   CustomHttpFirewall() {
     allowUrlEncodedSlash = true
   }
}

А затем настройте Spring Security для использования вашего собственного класса брандмауэра, как показано ниже.

grails.plugin.springsecurity.httpFirewallBeanClass = "full name of your class"

Примечание проверено, но это должно работать.

19.07.2017
  • Звучит разумно, и я смог это реализовать. Я назначу награду, как только смогу доказать решение в производственной среде, поскольку ошибка возникает только там. Заранее большое спасибо! 19.07.2017
  • Привет, Судхир, я отредактировал вопрос, добавив описание того, как я реализовал ваше предложение. Чего-то не хватает? 20.07.2017
  • Привет, Сундхир, хотя мне не удалось проверить ваш последний комментарий в продуктивной среде, я присудил вам награду. Если я смогу подтвердить, что решение работает, я также приму ответ позже. В любом случае, заранее большое спасибо! 26.07.2017
  • Не беспокойтесь, прокомментируйте, если вы все еще не можете заставить его работать 26.07.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..