Spring(Websockets / REST / Security)、JWT 和 Sockjs(Stomp)集成

Posted

技术标签:

【中文标题】Spring(Websockets / REST / Security)、JWT 和 Sockjs(Stomp)集成【英文标题】:Spring (Websockets / REST / Security), JWT and Sockjs (Stomp) integration 【发布时间】:2017-08-23 14:07:10 【问题描述】:

我正在开发一个项目并尝试集成:

Spring 安全性 Spring Websockets Spring REST Sockjs 和 Stomp (Angular2)

我尝试了 google/spring docs/jwt 示例,但在任何地方都找不到一个很好解释且有效(最重要的是)的示例。有没有人提到集成的例子(它不一定是 angular2,Sockjs & Stomp & Spring 都可以)。 这里的重要部分是安全性,它可以同时用于 websockets 和带有 JWT 的 REST。请帮助它只是让我发疯。

【问题讨论】:

简短回答 - 这是可能的。你到底有什么问题?您的问题过于宽泛,可能很快就会结束。 嗨 user1516875,这正是我面临的问题***.com/questions/43102947/…。我不想将两者混合在一起。非常感谢您的关注,这个问题让我晚上睡不着。 【参考方案1】:

您只需要在SecurityConfig 中定义自定义bearerTokenResolver 方法,并将访问令牌放入cookie 或参数中。

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter 
        @Override
        protected void configure(HttpSecurity http) throws Exception 
            http.cors()
                    .and()
                    .authorizeRequests()
                    .antMatchers(HttpMethod.GET, "/user/info", "/api/foos/**")
                    .hasAuthority("SCOPE_read")
                    .antMatchers(HttpMethod.POST, "/api/foos")
                    .hasAuthority("SCOPE_write")
                    .anyRequest()
                    .authenticated()
                    .and()
                    .oauth2ResourceServer()
                .jwt().and().bearerTokenResolver(this::tokenExtractor);

...


public String tokenExtractor(HttpServletRequest request) 
    String header = request.getHeader(HttpHeaders.AUTHORIZATION);
    if (header != null)
        return header.replace("Bearer ", "");
    Cookie cookie = WebUtils.getCookie(request, "access_token");
    if (cookie != null)
        return cookie.getValue();
    return null;

【讨论】:

以上是关于Spring(Websockets / REST / Security)、JWT 和 Sockjs(Stomp)集成的主要内容,如果未能解决你的问题,请参考以下文章

如何将 spring-data-rest 与 spring websocket 混合到一个实现中

将 websockets 集成到 Django Rest Framework 应用程序的简单方法?

配置 Spring 在哪个端口上公开 Websockets?

Spring、Camel、ActiveMQ 和 WebSockets

使用 spring 启用 WebSockets

对如何使用 Spring-websockets 进行 stomp 调用感到困惑