Es scheint kein sauberes und einfaches Beispiel für das Erstellen einer sicheren Websocket-Verbindung irgendwo auf den Interwebs zu geben, noch Anweisungen zum Einrichten eines ... irgendwelche Ideen?Wie machen Sie eine sichere Websocket-Verbindung mit Java auf der Client-Seite?
-2
A
Antwort
0
Ich würde einige Richtlinien für Websocket-Authentifizierung bereitstellen. Da Websocket von http aktualisiert wird, basiert die Authentifizierung auch auf http. Sie können die http-Verbindung mit ssl oder basic oder digest auth ausstatten.
Ich hatte mit Feder Websocketauth zuvor gearbeitet, ssl ist nur um http zu https zu aktualisieren. Ich würde hier Digest Auth für Federwebsocket posten.
1.Configure der Server Benutzer verdauen Auth, Frühling Sicherheit kann es bekommen:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
public final static String REALM="MY_REALM";
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN")
.and().withUser("test").password("test").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().exceptionHandling().authenticationEntryPoint(getDigestEntryPoint())
.and().addFilter(getDigestAuthenticationFilter(getDigestEntryPoint()));
}
@Bean
public MyDigestAuthenticationEntryPoint getDigestEntryPoint() {
MyDigestAuthenticationEntryPoint digestAuthenticationEntryPoint = new MyDigestAuthenticationEntryPoint();
digestAuthenticationEntryPoint.setKey("mykey");
digestAuthenticationEntryPoint.setNonceValiditySeconds(120);
digestAuthenticationEntryPoint.setRealmName(REALM);
return digestAuthenticationEntryPoint;
}
public DigestAuthenticationFilter getDigestAuthenticationFilter(
MyDigestAuthenticationEntryPoint digestAuthenticationEntryPoint) throws Exception {
DigestAuthenticationFilter digestAuthenticationFilter = new DigestAuthenticationFilter();
digestAuthenticationFilter.setAuthenticationEntryPoint(digestAuthenticationEntryPoint);
digestAuthenticationFilter.setUserDetailsService(userDetailsServiceBean());
return digestAuthenticationFilter;
}
@Override
@Bean
public UserDetailsService userDetailsServiceBean() throws Exception {
return super.userDetailsServiceBean();
}
}
public class MyDigestAuthenticationEntryPoint extends DigestAuthenticationEntryPoint {
@Override
public void afterPropertiesSet() throws Exception{
super.afterPropertiesSet();
setRealmName(WebSecurityConfig.REALM);
}
}
2.Extend von AbstractSecurityWebSocketMessageBrokerConfigurer:
@Configuration
@EnableWebSocketMessageBroker
public class WssBrokerConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer {
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages
.nullDestMatcher().authenticated()
.simpSubscribeDestMatchers("/topic/notification").permitAll()
.simpDestMatchers("/**").authenticated()
.anyMessage().denyAll();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/ws");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hpdm-ws").setAllowedOrigins("*").withSockJS();
}
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
MappingJackson2HttpMessageConverter converter =
new MappingJackson2HttpMessageConverter(mapper);
return converter;
}
@Override
protected boolean sameOriginDisabled() {
return true;
}
}
3.Digest Auth für Client auf dieses Thema hinweisen :
Verwandte Themen
- 1. machen eine sichere Ruhe Anfrage
- 2. Wie sichere Verbindung mit Python machen?
- 3. Wie sichere Sitzungen zu machen?
- 4. Versucht, auf sichere Website mit Java zuzugreifen
- 5. Wie sichere Online-Compiler machen?
- 6. java - Kompiliercode auf Clientseite ohne JDK
- 7. Wie fordere ich eine Node.js Codeausführung auf der Clientseite an?
- 8. Wie Sie JAXB-Annotationen auf der Clientseite für GWT verwenden?
- 9. Verwenden Sie eine sichere tmpfile mit Salzstapel
- 10. howto sichere Ajax-Anfragen mit jquery machen?
- 11. Wie sichere Sie eine Datei in Golang
- 12. Anmelden und dann eine Thread-sichere Anfrage machen
- 13. So validieren Sie die Summierung von Textboxwerten auf der Clientseite
- 14. So rufen Sie eine sichere Route mit AWS Lambda auf?
- 15. Java - Machen Sie eine Objektsammlung freundlich
- 16. Webgl auf Bokeh Clientseite deaktivieren
- 17. Machen Sie eine "Fake" -Maus in Java?
- 18. Erkennen von Socket.IO-Nachrichtenübermittlungsfehler auf der Clientseite
- 19. Verschlüsselung vertraulicher Daten auf der Clientseite
- 20. HTML5 - Datei hochladen, ohne sie auf der Clientseite zu verarbeiten
- 21. So überschreiben Sie den Stil einer Site auf der Clientseite
- 22. Sichere Nutzung von glMapBufferRange() auf Android/Java
- 23. LocalSpeicher- oder Cookie-Schlüsselname auf der Clientseite
- 24. Warum reagiert IIS auf eine sichere (SSL-) Seitenanforderung mit einer 302 auf seine nicht sichere Version?
- 25. Caching von Daten auf der Clientseite erzwingen
- 26. Eine DataTable mit Eingabetexten filtern Clientseite
- 27. Mit Java Spring, ist es möglich, einen Dienst auszuführen, der auf der Clientseite ausgeführt wird?
- 28. So rufen Sie eine Methode mit actionname -Attribut von Clientseite
- 29. Machen Sie eine Datei/Ordner versteckt unter Windows mit Java
- 30. Wie machen "Profis" eine GUI in Java?
Im Ernst, Sie können Google keine webSocket-Client-Bibliothek, die mit Java funktioniert? – jfriend00
Wie ich schon sagte, ich kann kein sauberes Beispiel finden, mit Java wäre 9 optimal. Wenn Sie ein Beispiel sehen, das irgendwo funktioniert, lassen Sie es mich wissen ... – whatfield