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?