мелодия для защиты грааля с фильтром грааля - PullRequest
4 голосов
/ 02 июня 2010

У меня есть приложение, в котором я использую пружинную защиту вместе с мелодией grails. Я планирую запустить мелодию Grails в производственной среде, но не хочу, чтобы посетители имели к ней доступ. Как мне этого добиться? Я попытался создать фильтр в Grails (просто показывая пример того, что я пытаюсь, а не фактический код) -

def filters = {
    allURIs(uri:'/**') {
        before = {
            //...
            if(request.forwardURI.indexOf("admin") != -1 ||
        request.forwardURI.indexOf("monitoring") != -1) {
                response.sendError 404
                return false 
            }
        }
    }
}

Но это не работает, так как запрос на "мониторинг" не попадает в этот фильтр. Я даже не хочу, чтобы пользователь знал, что такой URL существует, поэтому я хочу проверить в фильтре, что, если «мониторинг» - это URL, я показываю страницу с ошибкой 404. Это также причина, почему я не хочу защищать этот URL с помощью Spring Security, так как он покажет страницу «доступ запрещен».

По сути, я хочу, чтобы URL существовал, но он должен быть невидимым для пользователей. Я хочу, чтобы доступ был открыт только для определенных IP-адресов для этих специальных URL-адресов.

В другом примечании: возможно ли написать фильтр грааилса, который «действует» до срабатывания фильтра безопасности пружины? Я хочу иметь возможность выполнить некоторую фильтрацию, прежде чем пересылать запросы в систему безопасности Spring. Написание фильтра Grails, как описано выше, не помогает. Фильтр безопасности Spring срабатывает первым, если я получаю доступ к защищенному ресурсу, и этот фильтр не вызывается.

Спасибо

Ответы [ 4 ]

4 голосов
/ 02 июня 2010

Фильтры Grails являются обертками вокруг перехватчиков Spring, поэтому они запускаются после «настоящих» фильтров сервлетов, подобных тем, которые используются Spring Security. Если вы хотите, чтобы что-то срабатывало до Spring Security, вам нужно зарегистрировать фильтр в web.xml или, возможно, в цепочке фильтров плагина.

Это одна из мотиваций для фильтра IP-адресов. Мы хотели раздел администратора, который был бы доступен для зарегистрированных администраторов, но также доступен только при доступе из локальной сети или VPN. IP-адреса LAN и VPN начинаются с 10. Поэтому мы добавили правило для

'/admin/**': '10.**'

Фильтр отправляет ответ 404, чтобы скрыть существование ресурсов.

См. http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/10.%20Extending%20and%20configuring%20the%20plugin.html#10.8.%20IP%20Address%20Restrictions для документации по этому вопросу.

1 голос
/ 28 февраля 2012

Я также искал защиту Grails Melody (например, мониторинг) с помощью Spring Security. Я сделал это сейчас, используя аутентификацию Apache HTTP Basic (мы используем apache для прокси для tomcat), но это не идеально, так как я хочу развернуть приложение в CloudFoundry.

Можно ли, например, легко это сделать с помощью плагина Grails WebXmlConfig? Я вижу, что Берт внес вклад - по крайней мере - на страницу документации? Я не уверен, так как плагин на самом деле не задокументирован ...

0 голосов
/ 16 января 2012

Вот что я сделал в похожем сценарии (JavaMelody 1.29.0 и Spring Security 3.0.5). Я хотел ограничить доступ к отчетам Мелодии для пользователей-администраторов.

Конфигурация безопасности Spring:

<http auto-config="true" use-expressions="true">
    ...
    <intercept-url pattern="/monitoring/**" access="hasRole('ROLE_ADMIN')" />
    ...
</http>

web.xml config:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>monitoring</filter-name>
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>monitoring</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Ключевым моментом является обеспечение того, чтобы фильтр мониторинга был определен после цепи фильтра Spring Security.

0 голосов
/ 08 октября 2010

Хороший ответ у Берта.

Другим ответом может быть использование параметров безопасности, включенных в javamelody: http://code.google.com/p/javamelody/wiki/UserGuide#15._Security

Например, вы можете добавить следующий параметр, который является регулярным выражением, в вашем файле GrailsMelodyConfig.groovy: javamelody.'allowed-addr-pattern '=' 127.0.0.1 '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...