2015-11-04 2 views
0

Я недавно добавил Java Melody в приложение grails. Поэтому я хотел ограничить IP-адреса, которые могут получить доступ к конечной точке мониторинга, а также добавить для него базовый auth, чтобы никто не мог получить доступ к конечной точке мониторинга после того, как приложение выпущено для общего использования.Java Melody web.xml фильтры не работают с сервером Jetty

Я добавил фильтры к своему web.xml, согласно их документации (https://github.com/javamelody/javamelody/wiki/UserGuide#16-security).

Они выглядят так:

<filter> 
    <filter-name>javamelody</filter-name> 
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> 
    <init-param> 
     <param-name>authorized-users</param-name> 
     <param-value>user1:pwd1</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowed-addr-pattern</param-name> 
     <param-value>192\.168\.1\.*</param-value> 
    </init-param> 
</filter> 

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

Я проверил, что это работает, когда я запустить приложение с помощью Grails выполнения приложения. Если я попытаюсь получить доступ к конечной точке мониторинга, мне будет предложено ввести имя пользователя и пароль.

Однако, когда я создаю файл войны и развертываю его для запуска на экземпляре причала, фильтры безопасности больше не работают. Я могу получить доступ к конечной точке мониторинга без предоставления имени пользователя и пароля.

Может ли кто-нибудь мне помочь? Я новичок в этом, и я действительно не знаю, как продолжить эту проблему. Я искал ответы на вопросы, но ничего не соответствовало действительности. Я не уверен, что проблема связана с Java Melody или с Jetty.

Цените всю помощь, которую я могу получить. Благодаря!

EDIT:

Вся моя web.xml используется в grails prod run-app:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 
    metadata-complete="true" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

<display-name>/@[email protected]</display-name> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 

<context-param> 
    <param-name>webAppRootKey</param-name> 
    <param-value>@[email protected]</param-value> 
</context-param> 

<filter> 
    <filter-name>charEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>targetBeanName</param-name> 
     <param-value>characterEncodingFilter</param-value> 
    </init-param> 
    <init-param> 
     <param-name>targetFilterLifecycle</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 

<filter> 
    <filter-name>javamelody</filter-name> 
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> 
    <init-param> 
     <param-name>authorized-users</param-name> 
     <param-value>user1:pwd1</param-value> 
    </init-param> 
    <init-param> 
     <param-name>allowed-addr-pattern</param-name> 
     <param-value>192\.168\.1\.*</param-value> 
    </init-param> 
</filter> 

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


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


<listener> 
    <listener-class>org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener</listener-class> 
</listener> 

<!-- Grails dispatcher servlet --> 
<servlet> 
    <servlet-name>grails</servlet-name> 
    <servlet-class>org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>dispatchOptionsRequest</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    <async-supported>true</async-supported> 
</servlet> 

<!-- The Groovy Server Pages servlet --> 
<servlet> 
    <servlet-name>gsp</servlet-name> 
    <servlet-class>org.codehaus.groovy.grails.web.pages.GroovyPagesServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>gsp</servlet-name> 
    <url-pattern>*.gsp</url-pattern> 
</servlet-mapping> 

<session-config> 
    <!-- 30 minutes --> 
    <session-timeout>30</session-timeout> 
</session-config> 

<welcome-file-list> 
    <!-- 
    The order of the welcome pages is important. JBoss deployment will 
    break if index.gsp is first in the list. 
    --> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>index.gsp</welcome-file> 
</welcome-file-list> 

web.xml моего файла WAR:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" metadata-complete="true" version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<display-name>/radius-api-production-0.1</display-name> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
<context-param> 
    <param-name>webAppRootKey</param-name> 
    <param-value>radius-api-production-0.1</param-value> 
</context-param> 
<context-param> 
    <param-name>sample</param-name> 
    <param-value>Sample Value</param-value> 
</context-param> 
<context-param> 
    <param-name>javamelody.displayed-counters</param-name> 
    <param-value>http,sql,error,log,spring,jsp</param-value> 
</context-param> 
<filter> 
    <filter-name>monitoring</filter-name> 
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> 
    <async-supported>true</async-supported> 
</filter> 
<filter> 
    <filter-name>charEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <async-supported>true</async-supported> 
    <init-param> 
     <param-name>targetBeanName</param-name> 
     <param-value>characterEncodingFilter</param-value> 
    </init-param> 
    <init-param> 
     <param-name>targetFilterLifecycle</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter> 
    <filter-name>AssetPipelineFilter</filter-name> 
    <filter-class>asset.pipeline.AssetPipelineFilter</filter-class> 
    <async-supported>true</async-supported> 
</filter> 
<filter> 
    <filter-name>javamelody</filter-name> 
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> 
    <async-supported>true</async-supported> 
    <init-param> 
     <param-name>authorized-users</param-name> 
     <param-value>user1:pwd1</param-value> 
    </init-param> 
</filter> 
<filter> 
    <filter-name>urlMapping</filter-name> 
    <filter-class>org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter</filter-class> 
    <async-supported>true</async-supported> 
</filter> 
<filter> 
    <filter-name>hiddenHttpMethod</filter-name> 
    <filter-class>org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter</filter-class> 
    <async-supported>true</async-supported> 
</filter> 
<filter> 
    <filter-name>grailsWebRequest</filter-name> 
    <filter-class>org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter</filter-class> 
    <async-supported>true</async-supported> 
</filter> 
<filter> 
    <filter-name>grailsCacheFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <async-supported>true</async-supported> 
    <init-param> 
     <param-name>targetFilterLifecycle</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>charEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>hiddenHttpMethod</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>javamelody</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>AssetPipelineFilter</filter-name> 
    <url-pattern>/assets/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>grailsWebRequest</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>monitoring</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>urlMapping</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>grailsCacheFilter</filter-name> 
    <url-pattern>*.dispatch</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
</filter-mapping> 
<listener> 
    <listener-class>net.bull.javamelody.SessionListener</listener-class> 
</listener> 
<listener> 
    <listener-class>org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener</listener-class> 
</listener> 
<listener> 
    <listener-class>org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener</listener-class> 
</listener> 
<servlet> 
    <servlet-name>grails</servlet-name> 
    <servlet-class>org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>dispatchOptionsRequest</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    <async-supported>true</async-supported> 
</servlet> 
<servlet> 
    <servlet-name>gsp</servlet-name> 
    <servlet-class>org.codehaus.groovy.grails.web.pages.GroovyPagesServlet</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>grails-errorhandler</servlet-name> 
    <servlet-class>org.codehaus.groovy.grails.web.servlet.ErrorHandlingServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>gsp</servlet-name> 
    <url-pattern>*.gsp</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>grails-errorhandler</servlet-name> 
    <url-pattern>/grails-errorhandler</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>grails</servlet-name> 
    <url-pattern>*.dispatch</url-pattern> 
</servlet-mapping> 
<session-config> 
    <session-timeout>30</session-timeout> 
</session-config> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>index.gsp</welcome-file> 
</welcome-file-list> 
<error-page> 
    <error-code>500</error-code> 
    <location>/grails-errorhandler</location> 
</error-page> 

ответ

0
  1. вы можете включить отладочный журнал, чтобы узнать, запущен ли монитор. Я нашел это в источнике мелодии. LOG.debug("JavaMelody filter init started");
  2. вы можете расширить monitorFilter, переопределить метод init и добавить регистрацию инициализационных параметров. как: public void init(FilterConfig config) throws ServletException { //log the init-params here //blabla super.init(config); }

Ваша проблема выглядит вызвана web.xml conflit, предоставляя информацию весь файл web.xml и версии будет лучше.

+0

Я обновил сообщение, чтобы включить как web.xml, используемый в 'grails prod run-app', так и web.xml, включенный в сгенерированный файл войны, запускаемый на пристани. Я попробовал ваше предложение (несколько, не совсем) и обнаружил, что мои мелодичные фильтры регистрировались при выполнении «grails prod run-app», но не на причале. Возможно ли, что генерация файла web.xml для моей WAR заставила его работать неправильно? @PaniniGelato – Alron

+0

Я вижу 2 MonitoringFilter в вашем jetty-web.xml. Один из них называется «мониторинг» без init-params, другой - «javamelody» с параметрами. Не могли бы вы попытаться удалить один из них? – PaniniGelato

Смежные вопросы