java - 在将 spring security 与 spring websocket 集成时,在套接字 Controller 方法中访问用户名和

标签 java spring-mvc spring-security spring-websocket

我正在将 spring web socket 实现到我们的 web 应用程序中,我想在 socket Controller 方法中访问用户名,但我得到的是 null。

这是代码

@MessageMapping("/user/sockettest" )
@SendTo("/topic/sockettestresult")
public String sockAdd(ListId[] listIds) {
    ..
    SecurityContextHolder.getContext().getAuthentication().getPrincipal();

    return stringRet;
}

spring-security xml 看起来像这样

    <sec:intercept-url pattern="/topic/**" access="permitAll" />

    <sec:intercept-url pattern="/" access="permitAll" />
    <sec:intercept-url pattern="/login*" access="permitAll" />
    <sec:intercept-url pattern="/resources/**" access="permitAll" />

    <sec:form-login login-page="/login" default-target-url="/user/home" always-use-default-target="true" authentication-failure-url="/login?error"/>
    <sec:logout logout-success-url="/login?logout" delete-cookies="JSESSIONID" />
    <sec:access-denied-handler error-page="/denied"/>
    <sec:intercept-url pattern="denied/*" access="permitAll" />

    <sec:csrf disabled="true" />
</sec:http>

套接字配置如下所示

    <websocket:stomp-endpoint path="/user/sockettest">
    <websocket:sockjs/>
    </websocket:stomp-endpoint>

    <websocket:simple-broker prefix="/topic"/>

    <websocket:message-converters register-defaults="false">
        <bean id="mappingJackson2MessageConverter" class="org.springframework.messaging.converter.MappingJackson2MessageConverter">
            <property name="objectMapper" ref="objectMapper"></property>
        </bean>
    </websocket:message-converters>
</websocket:message-broker>

我看过一些示例,其中大部分都在 java 配置中,但是我遇到的问题是,当我使用 java 配置时,它会向目标 url 添加一个额外的/info 并且它甚至不连接到套接字,所以我采用 xml 路由。

我是 spring web sockets 的新手,我想我在将它与 spring security 集成时遗漏了一些东西,但这就是我。让我知道我在这里做错了什么?

最佳答案

您可以通过将 java.security.Principal 参数添加到套接字 Controller 方法来访问当前用户。

@MessageMapping("/user/sockettest" )
@SendTo("/topic/sockettestresult")
public String sockAdd(ListId[] listIds, Principal principal) {
    //do whatever you want 
    return stringRet;
}

docs

关于java - 在将 spring security 与 spring websocket 集成时,在套接字 Controller 方法中访问用户名和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277539/

相关文章:

java - Invalidate() 方法不会刷新 MVC ZK 中的 Web 元素

java - E/RecyclerView : No adapter attached;, 数据不想出现在fragment home中,

java - 无法让 Ajax 工作。这与附加的配置有关吗?

java - HTTP 状态 403 - 在请求参数中发现无效的 CSRF token 'null'

grails - Grails Spring安全性插件镜像访问控制

java - Android Firestore 将限制为每个用户 1 票

java - 将 LongBuffer/IntBuffer/ShortBuffer 转换为 ByteBuffer

java - Spring MVC配置问题

java - Spring Security 多 dao 身份验证

java - spring web, security + web.xml + mvc dispatcher + Bean 创建两次