2009-05-18 12 views
2

Ich versuche eine Steuerlogik zu erstellen, die von der aktuellen gsp-Seite abhängt, um eine Aktion aufzurufen, gibt es ein Tag oder eine Sitzungsmethode, mit der ich die aktuelle gsp-SeiteGrails Sicherheitsproblem und Suchmaschinenoptimierung

identifizieren kann

Ich möchte den Zugriff auf alle GSPs beschränken, außer singup und login. Wenn also ein Benutzer ein anderes gsp öffnet, wird er zur Anmeldeseite umgeleitet und er kann auch zur Anmeldeseite navigieren.

Die Logik i umzusetzen versuche wie diese ist, wenn CURRENT_PAGE login.gsp oder singup.gsp ist dann tun anmeldet und nichts anderes umleiten // wo Benutzerseite ohne Probleme

einzuloggen navigieren kann, und ich Ich möchte diese Logik im Hauptlayout hinzufügen, damit sie in der gesamten Anwendungsdomäne implementiert wird.

Ich frage mich, ob es eine alternative Möglichkeit gibt, dies mit RequestmapController oder UrlMappings zu tun?

Jeder, der Erfahrung mit springMVC hat, kann helfen, da Grails auf SpringMVC basiert, das seinerseits auf dem Standard-Servlet-Framework aufbaut!

Hinweis: Ich verwende Acegi Plugin

Bemerkung: Wie kann die Anwendung SEO freundlich sein mit dieser Art von Sicherheit implementiert Mechanismus (das heißt Google Indizierung.)?

+1

von 'aktuelle Gsp-Seite' meinst du den Dateinamen der Gsp-Seite, die gerendert wird? – Chii

+0

ja Chii das ist, was ich meinte, es ist wie ich möchte den Zugriff auf alle gsps außer singup und login, also wenn ein Benutzer öffnen andere gsp er wird auf die Anmeldeseite umgeleitet werden und er wird auch in der Lage sein, auf die Anmeldeseite zu navigieren Die Logik i umzusetzen versuche ist wie diese wenn current anmelden oder SINGUP dann nichts tun sonst Umleitung um sich anzumelden // wo Benutzer navigieren Seite ohne Probleme auch anmelden :) und ich will um diese Logik in das Hauptlayout einzufügen, damit es über die gesamte Anwendung implementiert wird, klar? – zotherstupidguy

+0

Ich frage mich, ob es eine alternative Möglichkeit gibt, dies mit RequestmapController oder UrlMappings zu tun? – zotherstupidguy

Antwort

3

bearbeiten: Sorry, ich Ihre Frage falsch verstanden. Ich dachte, du suchst eine Alternative zu Requestmaps. Deshalb habe ich vorgeschlagen, ursprünglich securing the controllers with annotations.

Wenn Sie Requestmaps verwenden Sie folgendes tun könnte:

  1. Erstellen Sie ein neues requestMap, die wie folgt aussieht:
    URL-Muster = /login/**
    Role = IS_AUTHENTICATED_ANONYMOUSLY

  2. Um den Zugriff auf den Rest der Website zu beschränken, erstellen Sie einen anderen requestmap-Eintrag, der mit allen URLs übereinstimmt:
    URL-Muster = /*/**
    Role = ROLE_USER (könnten Sie eine andere Rolle verwenden Sie)

IS_AUTHENTICATED_ANONYMOUSLY bedeutet, dass jemand die angepasst URLs zugreifen können.Die erste Regel ist spezifischer und sollte daher die zweite und allgemeinere Regel überschreiben.

Weitere Informationen finden Sie unter AcegiSecurity Plugin - Securing URLs.

In Bezug auf die SEO der Website. AFAIK-Suchmaschinen können nicht auf Websites zugreifen, die eine Authentifizierung benötigen. Aus diesem Grund verwenden Websites wie Expert Exchange sly tricks, um von Google indiziert zu werden.

Sie können wählen, anonymen Benutzern Lesezugriff zu gewähren, während sie eine Anmeldung zum Schreiben benötigen (wie SO). Auf diese Weise könnte Ihre Website von Suchmaschinen-Bots indiziert werden.

Ich hoffe, das hilft!

1

Sie benötigen das Spring Sicherheits-Plugin. Der beste Weg dazu besteht nicht in Ihren GSPs, sondern in einem Filter für alle Web-Anfragen. Das gibt dir die Requestsmap und UrlMappings, die GrailsNewbie erwähnt.

+0

Hallo, ich benutze das Acegi-Plugin, wie kann ich diesen Filter implementieren, wenn der Benutzer nicht angemeldet ist, kann er nur die signup.gsp und login.gsp browsen? – zotherstupidguy

3

Sie sollten dies lesen: link text

Und das Tutorial mit ACEGI Plugin: link text

Letzteres ist der Weg würde ich gehen. Sie können Rollen einrichten und "Seiten" und URLs nach Rollen sichern. Es enthält auch eine Möglichkeit, Benutzer zu erstellen und Rollen zuzuweisen.

das ACEGI Grails Plugin zu installieren, tun ein: grails install-plugin acegi

+0

Ich benutze bereits acegi !!! Ich weiß einfach nicht, wie man einen Filter macht, der die Arbeit richtig machen kann! – zotherstupidguy

+0

Was ich tun würde, ist, Ihre Rollen für die gewünschten Zugriffsebenen einzurichten und dann Requestmap-Einträge für ALLE URLs zu erstellen, mit Ausnahme von Registrierungs- und Login-Controllern (ACEGI stellt beide Funktionen als optionale Controller/Views zur Verfügung). Wenn Sie also eine Anforderungskarte verwenden, um einen Controller namens TosecureController zu sagen, sollte in Ihrer Grails-App eine URL von/tsecure vorhanden sein. Erstellen Sie in der Requestmap eine für/tosecure/** und es wird durch die Login-ACEGI-Controller/View (ich paraphrasiere) – tegbains

+0

Einfache Möglichkeit - eine allgemeine Anforderungskarte, die ALLES entspricht und die Rolle 'Benutzer' erfordern. Dann werden die Dinge, auf die Sie anonym zugreifen möchten, für sie überschrieben. –