4

使用 Ruby on Rails 框架开发的 Web 应用程序是否可以使用第三方安全工具拦截对其的所有调用?对该 Web 应用程序的任何调用都会转到安全工具而不是 Web 应用程序本身,然后安全工具可以将其重定向到 Web 应用程序。

在响应端类似,Web 应用程序响应在发送到客户端(浏览器)之前被安全工具拦截

4

1 回答 1

1

如果我了解您想要正确执行的操作,您可以使用 befor_methods 来执行此操作

回调是 Active Record 对象生命周期的挂钩,允许您在更改对象状态之前或之后触发逻辑。这可用于确保在调用destroy(通过覆盖before_destroy)或在验证属性之前(通过覆盖before_validation)删除关联和依赖对象。作为发起回调的示例,考虑 Base#save 调用新记录:

(-) save

(-) valid

(1) before_validation

(-) validate

(2) after_validation

(3) before_save

(4) before_create

(-) create

(5) after_create

(6) after_save

(7) after_commit

此外,可以将 after_rollback 回调配置为在发出回滚时触发。查看 ActiveRecord::Transactions 以获取有关 after_commit 和 after_rollback 的更多详细信息。

此外,每当触摸对象时都会触发 after_touch 回调。

最后,为查找器找到并实例化的每个对象触发 after_find 和 after_initialize 回调,并且在实例化新对象后也触发 after_initialize。

总共有 19 个回调,它们为您提供了巨大的能力来为 Active Record 生命周期中的每个状态做出反应和准备。为现有记录调用 Base#save 的顺序类似,除了每个 _create 回调被相应的 _update 回调替换。

例子:

class CreditCard < ActiveRecord::Base
  # Strip everything but digits, so the user can specify "555 234 34" or
  # "5552-3434" and both will mean "55523434"
  before_validation(on: :create) do
    self.number = number.gsub(/[^0-9]/, "") if attribute_present?("number")
  end
end

class Subscription < ActiveRecord::Base
  before_create :record_signup

  private
    def record_signup
      self.signed_up_on = Date.today
    end
end

class Firm < ActiveRecord::Base
  # Destroys the associated clients and people when the firm is destroyed
  before_destroy { |record| Person.destroy_all "firm_id = #{record.id}"   }
  before_destroy { |record| Client.destroy_all "client_of = #{record.id}" }
end
于 2013-12-22T00:33:26.837 回答