Ein Arbeitsbeispiel, was wollen Sie in der public-access branch of this github project gefunden werden kann. Es verwendet jedoch Vaadin 8.
Im Wesentlichen können Sie Setup Ihre Anwendung teilweise öffentlich sein, dh zugreifbar nicht authentifizierte Benutzer für bestimmte Teile und erfordert Login für andere, wie folgt:
@Configuration
@EnableWebSecurity
@EnableVaadinSharedSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
public class SecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter {
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().disable();
http.formLogin().disable();
http.csrf().disable();
http
.authorizeRequests()
.antMatchers("/vaadinServlet/UIDL/**").permitAll()
.antMatchers("/vaadinServlet/HEARTBEAT/**").permitAll()
.anyRequest().permitAll();
http
.logout()
.addLogoutHandler(keycloakLogoutHandler())
.logoutUrl("/sso/logout").permitAll()
.logoutSuccessUrl("/");
http
.addFilterBefore(keycloakPreAuthActionsFilter(), LogoutFilter.class)
.addFilterBefore(keycloakAuthenticationProcessingFilter(), BasicAuthenticationFilter.class);
http
.exceptionHandling()
.authenticationEntryPoint(authenticationEntryPoint());
http
.sessionManagement()
.sessionAuthenticationStrategy(sessionAuthenticationStrategy());
}
...
}
Die Linie http.anyRequest().permitAll();
ist das wichtigste, wo Sie Konfigurieren Sie den Filter, um alle Anfragen zuzulassen. Sie könnten dies weiterhin so anpassen, dass nur bestimmte URLs öffentlich zugänglich sind.
Sie können dann Spring-Sicherheitsanmerkungen für Methoden/Ansichten/Komponenten verwenden, um Ihre feingranulare Zugriffskontrolle zu konfigurieren. Z. B:
@SpringComponent
@Secured("ROLE_ANONYMOUS")
public class LoginOperation implements Runnable {
@Override
public void run() {
// login logic
}
}
und
@Secured("ROLE_USER")
public class LogoutOperation implements Runnable {
@Override
public void run() {
// logout logic
}
}
Könnten Sie ein Beispiel von dem, was Sie in Ihren Methoden und UI haben? Ich benutze nicht Vaadin, aber AFAIK wird alles mit Java gemacht (keine XML-basierten Strukturen für Views), oder? –
Ja, es ist alles in Java. Es gibt ein Vaadin-Servlet, das einer URL zugeordnet ist, "Vaadin-Seiten" werden von Ajax an den Browser gesendet. – dve
Dann können Sie die Standardmethode für den Zugriff auf Rollen mit Federsicherheit verwenden und Ihre Ansichtsgenerierungscodeteile in Bedingungen umwandeln, um das zu rendern abhängig davon, welche Art von Zugriff der Benutzer hat. –