2010-06-01 5 views
4

J'ai une application où j'utilise la sécurité de printemps avec la mélodie de grails. J'ai l'intention d'exécuter la mélodie de grails dans l'environnement de production, mais je ne veux pas que les visiteurs y aient accès. Comment devrais-je y parvenir? J'ai essayé de créer un filtre dans Grails (juste montrer l'échantillon de ce que je suis en train, pas le code réel) -protection mélodie grails avec filtre de grails

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

Mais ce travail ne marche pas comme la demande de « surveillance » ne marche pas atteint ce filtre. Je ne veux même pas que l'utilisateur sache qu'une telle URL existe, donc je veux vérifier dans le filtre que si "surveillance" est l'URL, je montre la page d'erreur 404. C'est aussi la raison pour laquelle je ne veux pas protéger cette URL avec la sécurité de printemps car elle affichera la page "accès refusé".

Fondamentalement, je veux que l'URL existe, mais ils devraient être invisibles pour les utilisateurs. Je veux que l'accès soit ouvert uniquement à certaines adresses IP pour ces URL spéciales. Sur une autre note, est-il possible d'écrire un filtre à gravier qui «agit» avant que le filtre de sécurité à ressort ne soit touché? Je veux être en mesure de faire un peu de filtrage avant de transmettre les demandes de sécurité de printemps. L'écriture d'un filtre à gravier comme ci-dessus n'aide pas. Le filtre de sécurité de printemps est touché en premier si j'accède à une ressource protégée et que ce filtre n'est pas appelé.

Merci

Répondre

4

filtres Grails sont transposés sur Spring Interceptor, ils le feu après les filtres de servlet « vrais » comme ceux utilisés par Spring Security. Si vous voulez que quelque chose se déclenche avant Spring Security, vous devrez enregistrer un filtre dans web.xml, ou éventuellement dans la chaîne de filtres du plugin.

Ceci est l'une des motivations du filtre d'adresse IP. Nous souhaitions une section d'administration disponible pour les administrateurs connectés, mais uniquement disponible si elle était accessible depuis le LAN ou le VPN. LAN et VPN adresses IP a commencé avec 10. Nous avons donc ajouté une règle pour

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

Le filtre envoie une réponse 404 à cacher l'existence des ressources.

Voir http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/10.%20Extending%20and%20configuring%20the%20plugin.html#10.8.%20IP%20Address%20Restrictions pour les documents à ce sujet.

+0

Merci Burt! Je vais opter pour la "vraie" solution de filtrage. Il semble maintenant que vous devriez voir: – batmannavneet

+0

http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/18%20IP%20Address%20Restrictions.html – evernat

0

La réponse de Burt est bonne.

Une autre réponse peut être d'utiliser JavaMelody inclus des options de sécurité: http://code.google.com/p/javamelody/wiki/UserGuide#15._Security

Par exemple, vous pouvez ajouter le paramètre suivant qui est une expression rationnelle dans votre fichier GrailsMelodyConfig.groovy: javamelody.'allowed-adr-modèle '=' 127.0.0.1 '

0

Voici ce que j'ai fait dans un scénario similaire (JavaMelody 1.29.0 et Spring Security 3.0.5). Je voulais limiter l'accès aux rapports Melody aux utilisateurs admin.

config de sécurité Spring:

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

config web.xml:

<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> 

Le point clé est de se assurer que le suivi-filtre est défini après la chaîne de filtrage de sécurité Spring .

1

J'ai cherché à sécuriser Melody Grails (par exemple/surveillance) en utilisant Spring Security ainsi. Je l'ai fait maintenant en utilisant l'authentification Apache HTTP Basic (nous utilisons apache pour proxy to tomcat), mais ce n'est pas idéal car je cherche à déployer une application sur CloudFoundry.

Est-ce que cela pourrait, par exemple, être facilement fait en utilisant le plugin Grails WebXmlConfig? Je vois que Burt a contribué - au moins - à la page de documentation? Je ne suis pas sûr que le plugin n'est pas vraiment documenté ...