小编Dav*_*ips的帖子

Rails CSRF保护如何运作?

InvalidAuthenticityToken当CSRF令牌不匹配时,Rails会引发一个.但是,从阅读来源,我无法弄清楚这是如何实际发生的.我首先为该类修饰树:

$ ack --ignore-dir=test InvalidAuthenticityToken

actionpack/lib/action_controller/metal/request_forgery_protection.rb
4:  class InvalidAuthenticityToken < ActionControllerError #:nodoc:
17:  # which will check the token and raise an ActionController::InvalidAuthenticityToken

actionpack/lib/action_dispatch/middleware/show_exceptions.rb
22:      'ActionController::InvalidAuthenticityToken' => :unprocessable_entity
Run Code Online (Sandbox Code Playgroud)

只有两次点击,忽略了评论.第一个是类定义:

class InvalidAuthenticityToken < ActionControllerError #:nodoc:
end
Run Code Online (Sandbox Code Playgroud)

第二个是将异常转换为HTTP状态代码.通过调用protect_from_forgery控制器来启用CSRF保护,让我们看一下:

def protect_from_forgery(options = {})
  self.request_forgery_protection_token ||= :authenticity_token
  before_filter :verify_authenticity_token, options
end
Run Code Online (Sandbox Code Playgroud)

它添加了一个过滤器:

def verify_authenticity_token
  verified_request? || handle_unverified_request
end
Run Code Online (Sandbox Code Playgroud)

验证失败时会调用此函数:

def handle_unverified_request
  reset_session
end
Run Code Online (Sandbox Code Playgroud)

那么InvalidAuthenticityToken实际上是如何提出的?

ruby ruby-on-rails ruby-on-rails-3

21
推荐指数
2
解决办法
1万
查看次数

Maven:如何指定运行哪个程序集插件

我有一个有多个程序集执行的pom.当我跑步时,例如mvn package,它运行所有的执行.我怎么能告诉它只运行foo执行?

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>foo/id>
                    <phase>package</phase>
                    <goals><goal>single</goal></goals>
                    <configuration>...</configuration>
                </execution>
                <execution>
                    <id>bar</id>
                    <phase>package</phase>
                    <goals><goal>single</goal></goals>
                    <configuration>...</configuration>
                </execution>
Run Code Online (Sandbox Code Playgroud)

在我看来,我的上述内容类似于以下内容Makefile:

all: foo bar

foo:
    ... build foo ...

bar:
    ... build bar ...
Run Code Online (Sandbox Code Playgroud)

我可以运行make all或只是make构建一切,或者我可以运行make foomake bar构建单个目标.我怎样才能用Maven实现这个目标?

maven-3 maven maven-assembly-plugin

14
推荐指数
2
解决办法
9491
查看次数

修改Sphinx TOC树

我有一个带有TOC()的Sphinx项目.问题是我想的深度减少了部分,因此它不包括在主TOC发行说明列表(名单太长).index.rst:maxdepth: 21release

似乎可以使用doctree-resolved事件处理程序修改TOC列表,但我无法弄清楚如何在事件处理程序中修改TOC树:

from sphinx import addnodes

def setup(app):
    def update_toctree(app, doctree, docname):
        if docname != 'index':
            return

        node = doctree.traverse(addnodes.toctree)[0]
        toc = app.env.resolve_toctree(docname, app.builder, node)

        # do something with "toc" here

    app.connect('doctree-resolved', update_toctree)
Run Code Online (Sandbox Code Playgroud)

python python-sphinx

11
推荐指数
2
解决办法
882
查看次数

获取当前正在运行的Hadoop任务的任务尝试ID

Hadoop教程的Task Side-Effect Files部分提到使用任务的"尝试"作为唯一名称.如何在我的mapper或reducer中获取此尝试ID?

hadoop

8
推荐指数
2
解决办法
7832
查看次数

在Presto SQL中选择Top#?

Presto SQL在SELECT语句中是否真的缺少TOP X功能?

如果是这样,同时有解决方法吗?

https://prestodb.io/

sql presto

8
推荐指数
1
解决办法
1万
查看次数

Jackson 中不区分大小写的 JsonNode

我需要反序列化 JSON 对象并以不区分大小写的方式访问字段。例子:

String s = "{\"FOO\": 123}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(s);
node.get("foo"); // this should return the "FOO" field
Run Code Online (Sandbox Code Playgroud)

这需要高性能,因此调用getFieldNames()和小写结果并不是一个好的解决方案。

java json jackson

5
推荐指数
1
解决办法
5624
查看次数

从 Maven 快照中获取生成的唯一版本

根据手册,在 Maven 3 中,我们被迫使用uniqueSnapshots=true. 这意味着每个部署1.0-SNAPSHOT实际上都由一些唯一的、规范的 ID 支持,例如1.0-20080207-230803-1.

因此,调用mvn deploy会产生在mvn调用可执行文件之前无法确定规范版本的工件。

因此,如果希望对之后生成的唯一 ID 调用任何操作,则必须尝试在mvn deploy完成后从 Maven 可执行文件中提取生成的 ID 。

有没有这样的机制来获取唯一ID?

例如,mvn deploy将产生以下输出:

Uploading: https://oss.sonatype.org/content/repositories/snapshots/io/airlift/slice/0.11-SNAPSHOT/slice-0.11-20150220.165404-2.jar
Run Code Online (Sandbox Code Playgroud)

但是如果0.11-20150220.165404-2不解析 Maven 的输出,似乎没有办法访问 ID 。

示例场景: mvn build 导致一个新的(唯一的)工件被推送到内部存储库管理器。完成后,我们希望通过 HTTP 推送通知以通知某个远程应用程序新的 SNAPSHOT 版本的应用程序。

虽然我们的资源库管理使我们能够查询最新的快照版本,这是一样的能够通过周围绝对引用到特定版本。

maven maven-deploy-plugin

5
推荐指数
1
解决办法
824
查看次数

Presto 中的用户定义函数

我目前正在使用 Presto 0.80。我必须编写一个用户定义的函数来在选择查询期间将摄氏度转换为华氏度。我使用 Hive QL 做了同样的事情,但想知道我们是否可以在 Facebook Presto 中复制相同的内容。

任何帮助将不胜感激。

谢谢!!

presto

5
推荐指数
1
解决办法
1万
查看次数

Rails ActiveRecord: Skip validations for associations

I'm re-asking this question because the code and example is wrong (it actually works in the case shown).

Given these models:

class Author < ActiveRecord::Base
  has_many :books
  validates_presence_of :email
end

class Book < ActiveRecord::Base
  belongs_to :author
  validates_presence_of :title
end
Run Code Online (Sandbox Code Playgroud)

我们可以在创建图书时跳过验证:

b = Book.new
b.save(:validate => false)
Run Code Online (Sandbox Code Playgroud)

但是,如果我们从数据库中检索无效的Book并将其分配给Author中的关联,则不允许我们保存Author:

a = Author.new
a.email = "foo"
a.books = Book.all
a.save!
Run Code Online (Sandbox Code Playgroud)

这是错误:

ActiveRecord :: RecordInvalid:验证失败:图书无效

我们如何跳过相关图书模型的验证而不为作者跳过它们?

请注意,has_many :books, :validate => false在Author中说不起作用:在保存作者的情况下静默丢弃关联.

validation activerecord ruby-on-rails associations ruby-on-rails-3

4
推荐指数
1
解决办法
7513
查看次数