标签 clojure 下的文章

Luminus web项目默认会启用anti-forgery特性以防止跨站攻击,极大增强了安全性。但是也为一些异步发生(不是来源于服务端的输出页面)的请求(ajax)带来了不便。

可以如下解决之:

若你的网页模板是经由selmer layout的,它会自动带上这个anti-forgery token。你便可以在js中添加如下代码

```javascript

var csrfToken = "{{csrf-token}}";
$.ajaxPrefilter(function (options, originalOptions, request) {
if (csrfToken) {
request.setRequestHeader('X-CSRF-Token', csrfToken);
}
});
```

Luminus框架的anti-forgery middleware也可以接受http header中的"X-CSRF-Token"指定的token。
这样子就把token给带到服务端了。让ajax请求顺利发出。

用了clojure,才发现北方有一座高山……

今天网站中需要做一个小功能,通过restful api请求另外一个内部网站的数据,但是写这个网站的同学给出的数据是[[a b c] [d e f]...]另外还有一个用于代表每一项的链接的links: [link1 link2 link3...]

需要将之每项对应合并起来,找了下发现map-indexed非常适合这个场景:

```clojure
(def test1 [['a ] ['b] ['c]])
(def test2 ['c 'd 'e])
(defn my-merge [vect1 vect2]
(into [] (map-indexed
(fn [idx item] (merge item (vect2 idx))) vect1)))

(my-merge test1 test2)

=>[[a c] [b d] [c e]]
```

[environ](https://github.com/weavejester/environ)可以很方便帮我们管理项目中的各种配置,但是最近在使用的时候遇到了一个问题,就是我在dev, test profile下配置的database-uri到打出uberjar之后就访问不到了。最后看了下源码,在生产环境下,需要通过进程环境变量或Java系统属性来完成这一目的:

进程环境变量:

```bash
DATABASE_URL=jdbc:postgres://localhost/prod java -jar standalone.jar
```
Java系统属性:

```bash
java -Ddatabase.url=jdbc:postgres://localhost/prod -jar standalone.jar
```