【问题标题】:Spring (Websockets / REST / Security), JWT and Sockjs (Stomp) integrationSpring(Websockets / REST / Security)、JWT 和 Sockjs(Stomp)集成
【发布时间】: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,这正是我面临的问题stackoverflow.com/questions/43102947/…。我不想将两者混合在一起。非常感谢您的关注,这个问题让我晚上睡不着。

标签: spring websocket jwt stomp spring-websocket


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 2015-12-16
    • 1970-01-01
    • 2014-09-21
    • 2016-12-29
    • 2016-07-04
    • 2023-03-25
    • 2017-09-14
    • 2015-01-26
    相关资源
    最近更新 更多