小编L M*_*ris的帖子

使用SockJS提供auth标头

我有一个Spring MVC服务器,它提供了一堆REST端点以及一个websocket端点.除登录端点之外的所有内容都需要身份验 我正在使用JWT来验证来自客户端的请求.

当用户登录时,我正在返回包含JWT令牌的X-AUTH-TOKEN标头.然后,在每个请求到服务器的同一个头中传递此令牌.这一切都适用于REST端点,但我无法弄清楚如何在websocket上执行此操作.

我正在使用SockJS,当我打开连接时:

var socket = new SockJS('/socket/updates', null, {});
Run Code Online (Sandbox Code Playgroud)

这会导致对/ socket/updates/info?t = xxx的GET请求返回403(因为默认情况下一切都需要auth).

理想情况下,我只是在SockJS发出的任何XHR请求上发送我的X-AUTH-TOKEN标头,但我看不到添加标头查看API的任何方法.

最糟糕的情况我可以改变SockJS这样做,但我想知道这个功能是否被故意遗漏了?我知道SockJS出于安全原因不支持cookie,但这不是我想要做的.

此外,为了进行测试,我确实允许信息端点具有匿名访问权限,但是在其他端点上有403个权限 - 简单地传递这些请求的auth详细信息比在我的服务器安全性中挖洞更为优雅.

任何帮助赞赏.

干杯

rest model-view-controller spring websocket sockjs

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

通过JSR-223运行kotlin非常慢

我正在运行以下代码,在OSX(Sierra)和Windows 10上执行需要3到6秒.我从未见过使用JSR-223这么慢,特别是考虑到正在评估的内容的简单性.通过YourKit中的调用树挖掘它似乎花费了大部分时间在KotlinJsr223JvmLocalScriptEngine.getReplEvaluator中,但我看不到过去.

这是使用jdk1.8.0_71和kotlin 1.2.10.

有任何想法吗?

谢谢

import javax.script.ScriptEngineManager

fun main(args: Array<String>) {
    System.setProperty("idea.io.use.fallback", "true") // need this on windows, not required on osx it seems!
    val engine = ScriptEngineManager().getEngineByExtension("kts")!!

    val startTime = System.currentTimeMillis()

    engine.eval("val x = 5")

    println(System.currentTimeMillis() - startTime)
}
Run Code Online (Sandbox Code Playgroud)

我的构建脚本如下:

buildscript {
    ext.kotlin_version = '1.2.10'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'xxx'
version '1.0-SNAPSHOT'

apply plugin: 'kotlin'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-script-util:$kotlin_version"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8" …
Run Code Online (Sandbox Code Playgroud)

jsr223 kotlin

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