【问题标题】:Grails Security Problem and Search Engine optimizationGrails 安全问题和搜索引擎优化
【发布时间】:2010-10-26 22:29:11
【问题描述】:

我正在尝试构建一个控制逻辑,它依赖于当前的 gsp 页面来调用操作,是否有一个标签或会话方法可以用来识别当前的 gsp 页面

我想限制对除 singup 和 login 之外的所有 GSP 的访问,因此如果用户打开任何其他 gsp,他将被重定向到注册页面,并且他还可以导航到登录页面。

如果 current_Page 是 login.gsp 或 singup.gsp,我尝试实现的逻辑是这样的,然后什么也不做

我想在主布局中添加这个逻辑,以便在所有应用程序域中实现它。

我想知道是否有使用 RequestmapController 或 UrlMappings 的替代方法?

任何有 springMVC 经验的人都可以提供帮助,因为 Grails 构建在 SpringMVC 之上,而 SpringMVC 又构建在标准 servlet 框架之上!

注意:我使用的是 Acegi 插件

备注:应用程序如何在实现这种安全机制的情况下对 SEO 友好(即 Google 索引)?

【问题讨论】:

  • “当前 gsp 页面”是指正在呈现的 gsp 页面的文件名吗?
  • 是的 Chii 这就是我的意思,就像我想限制对除 singup 和登录之外的所有 gsp 的访问,所以如果用户打开任何其他 gsp,他将被重定向到注册页面,他也将能够导航到登录页面如果当前页面是登录或登录,那么我尝试实现的逻辑是这样的这个逻辑在主布局中,所以它可以跨所有应用程序实现,清楚吗?
  • 我想知道是否有使用 RequestmapController 或 UrlMappings 的替代方法?

标签: grails spring-mvc spring-security gsp


【解决方案1】:

编辑:抱歉,我误解了你的问题。我以为您正在寻找 Requestmaps 的替代品。这就是为什么我最初建议securing the controllers with annotations.

如果您想使用 Requestmaps,您可以执行以下操作:

  1. 创建一个新的 Requestmap,如下所示:
    URL 模式 = /login/**
    角色 = IS_AUTHENTICATED_ANONYMOUSLY

  2. 要限制对站点其余部分的访问,请创建另一个匹配所有 url 的 requestmap 条目:
    URL 模式 = /*/**
    Role = ROLE_USER(你可以使用任何你喜欢的角色)

IS_AUTHENTICATED_ANONYMOUSLY 表示任何人都可以访问匹配的 URL。第一个规则更具体,因此应该覆盖第二个更一般的规则。

您可以查看AcegiSecurity Plugin - Securing URLs了解更多信息。

关于网站的 SEO。 AFAIK 搜索引擎无法访问需要身份验证的网站。这就是为什么像 Experts Exchange 这样的网站使用sly tricks 来获得 Google 索引的原因。

您可以选择授予匿名用户读取权限,同时需要登录才能写入(就像 SO 一样)。这将允许您的网站被搜索引擎机器人索引。

我希望这会有所帮助!

【讨论】:

    【解决方案2】:

    您应该阅读以下内容:link text

    以及使用ACEGI插件的教程:link text

    后者是我要走的路。它允许您设置角色并按角色保护“页面”和 URL。它还包括一种创建用户并将其分配给角色的方法。

    要安装 ACEGI grails 插件,请执行以下操作:grails install-plugin acegi

    【讨论】:

    • 我已经在用acegi了!!!我只是不知道如何制作一个可以正确完成工作的过滤器!
    • 我要做的是将您的角色设置为您想要的访问级别,然后为您的所有 URL 创建 Requestmap 条目,除了您的注册和登录控制器(ACEGI 作为可选控制器提供这两种功能/意见)。因此,如果您应用一个 Requestmap 来表示一个名为 TosecureController 的控制器,它应该在您的 grails 应用程序中有一个 /tosecure 的 URL。在 Requestmap 中为 /tosecure/** 创建一个,它将由登录 ACEGI 控制器/视图保护(我在解释)
    • 简单的方法 - 制作一个匹配一切的通用请求图,并让它需要“用户”角色。然后,您希望匿名访问的东西,覆盖它们。
    【解决方案3】:

    您需要 Spring 安全插件。最好的方法不是在您的 GSP 中,而是对所有 Web 请求使用过滤器。这会给你提到的 Requestmaps 和 UrlMappings GrailsNewbie。

    【讨论】:

    • 您好,我正在使用 acegi 插件,如何实现该过滤器,以便如果用户未登录,他将只能浏览到 signup.gsp 和 login.gsp?
    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 2015-07-19
    • 2011-08-28
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多