2009-05-18 2 views
2

Я пытаюсь построить логику управления, которая зависит от текущей страницы gsp для вызова действия, есть ли тег или метод сеанса, который я могу использовать для идентификации текущей страницы gspПроблема безопасности и безопасности поисковой системы Grails

Я хочу ограничить доступ ко всем GSP, за исключением singup и login, поэтому, если пользователь откроет любой другой gsp, он будет перенаправлен на страницу регистрации, и он также сможет перейти на страницу входа.

Логика я пытаюсь реализовать, как это, если CURRENT_PAGE является login.gsp или singup.gsp то не делать ничего другого перенаправлять подписаться // где пользователь может перейти на страницу входа без проблем тоже

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

Мне интересно, есть ли альтернативный способ сделать это с помощью RequestmapController или UrlMappings?

Любой, кто имеет опыт работы с весной, сможет помочь, так как Grails построен на вершине SpringMVC, который, в свою очередь, построен на основе стандартной структуры сервлетов!

Примечание: Я использую Acegi Plugin

Примечание: Как приложение может быть SEO дружественных с этим типом механизма безопасности реализованного (т.е. индексации Google.)?

+1

«Текущая страница gsp» означает ли вы имя файла страницы gsp, которая отображается? – Chii

+0

yes Chii thats, что я имел в виду, вроде как я хочу ограничить доступ ко всем gsps, кроме singup и login, поэтому, если пользователь откроет любой другой gsp, он будет перенаправлен на страницу регистрации, и он также сможет перейти на страницу входа в систему логика я пытаюсь реализовать, как это если CurrentPage будет войти в систему или нет singup то ничего еще перенаправлять, чтобы зарегистрироваться // где пользователь может перейти на страницу входа без проблем тоже :) и я хочу добавить эту логику в основную компоновку, чтобы она была реализована через все приложение, понятное? – zotherstupidguy

+0

Мне интересно, есть ли альтернативный способ сделать это с помощью RequestmapController или UrlMappings? – zotherstupidguy

ответ

3

Редактировать: К сожалению, я не понял ваш вопрос. Я думал, что вы ищете альтернативу Requestmaps. Именно поэтому я изначально предложил securing the controllers with annotations.

Если вы хотите использовать Requestmaps вы можете сделать следующее:

  1. Создать новый Requestmap который выглядит следующим образом:
    URL шаблон = /login/**
    Role = IS_AUTHENTICATED_ANONYMOUSLY

  2. Чтобы ограничить доступ к остальной части сайта, создайте еще одну запись requestmap, которая соответствует всем URL-адресам:
    URL шаблон = /*/**
    Роль = ROLE_USER (вы можете использовать любую другую роль, которую вы любите)

IS_AUTHENTICATED_ANONYMOUSLY означает, что любой желающий может получить доступ к совпавшие URL.Первое правило более конкретное и поэтому должно переписывать второе и более общее правило.

Дополнительную информацию вы можете найти на странице AcegiSecurity Plugin - Securing URLs.

Что касается SEO сайта. Поисковые системы AFAIK не могут получить доступ к сайтам, нуждающимся в аутентификации. Вот почему сайты, такие как Expert Exchange, используют sly tricks для индексирования Google.

Вы можете выбрать анонимный доступ для чтения пользователей, требуя ввода имени пользователя (например, SO). Это позволит вашему сайту индексироваться поисковыми роботами.

Надеюсь, это поможет!

1

Вам нужен плагин безопасности Spring. Лучший способ сделать это не входит в ваши GSP, а использует фильтр для всех веб-запросов. Это даст вам упоминания о запросах и адресах UrlMappings GrailsNewbie.

+0

Привет, я использую плагин acegi, как я могу реализовать этот фильтр, поэтому, если пользователь не выполнил вход в систему, он сможет только браузеру подключаться к signup.gsp и login.gsp? – zotherstupidguy

3

Вы должны прочитать: link text

и учебные пособия с помощью Acegi плагина: link text

Последнего пути я бы. Он позволяет настраивать роли и защищать «страницы» и URL-адреса по ролям. Он также включает способ создания пользователей и назначения их роли.

Чтобы установить Acegi Grails плагин сделать: grails install-plugin acegi

+0

Я уже использую acegi !!! Я просто не знаю, как сделать фильтр, который может сделать работу правильно! – zotherstupidguy

+0

Что я хотел бы сделать, это сделать роли для требуемых уровней доступа, а затем сделать записи Requestmap для ВСЕХ ваших URL-адресов, ЗА ИСКЛЮЧЕНИЕМ для контроллеров регистрации и входа в систему (ACEGI предоставляет обе функции в качестве дополнительных контроллеров/представлений). Поэтому, если вы примените Requestmap, чтобы сказать контроллер под названием TosecureController, у него должен быть URL-адрес/tosecure в вашем приложении grails. В Requestmap создайте его для/tosecure/**, и он будет защищен логином ACEGI-контроллером/представлением (я перефразирую) – tegbains

+0

Легкий способ - создать общую схему запроса, которая соответствует всем, и потребовать роль пользователя. Затем, вещи, которые вы хотите быть доступными анонимным, переопределите их. –