可以使用grails 2.x中的g:form和g:link构建安全的https链接吗?

时间:2012-06-13 19:14:05

标签: grails https spring-security

这类似于我尚未回答的问题https://stackoverflow.com/questions/10825422/can-grails-redirect-command-be-told-to-respect-protocol-of-the-current-request,但在这种情况下,我只是想确保我向控制器指定的某些链接和表单操作是明确的https。我知道我可以手动构建这些链接,但这会破坏标签的目的,自动添加正确的主机名,应用程序路径等。

在一个完美的世界中,如果我在https页面上,链接将是相对的,如果不是,则是绝对的,但如果不可能,我将始终采用绝对链接。

由于

3 个答案:

答案 0 :(得分:2)

这个请求有一个open jira

我认为您可以创建自己的标记库来完成这项工作。只需拨打g.createLink并将http替换为https。

class MyTagLib {
  def secureLink = { attrs, body ->
    def link = g.createLink(attrs)
    out << link.replace('http','https')
  }
}

答案 1 :(得分:0)

执行此操作的最快方法是在grails.serverURL中配置Config.groovy以使用https协议。然后在gsp form tags和链接标记中使用absolute="true"

答案 2 :(得分:0)

扩展Sergios解决方案,但强制绝对=“真”:

class MyTagLib {
  def secureLink = { attrs, body ->
    // forcing creation of an absolute url
    attrs.absolute = 'true'

    def link = g.createLink(attrs)
    out << link.replaceFirst(/^http:/, 'https:')
  }
}

或者对于你的“完美世界”场景,你可以试试这个:

class MyTagLib {
  def secureLink = { attrs, body ->
    if (!request.isSecure()) {
      attrs.absolute = 'true'
      def link = g.createLink(attrs)
      out << link.replaceFirst(/^http:/, 'https:')
    } else {
      out << g.createLink(attrs)
    }
  }
}