2017-04-20 1 views
1

Je veux sécuriser mon application vaadin avec la sécurité du porte-clés et du ressort. J'essaie d'utiliser le "keycloak-spring-security-adapter". Mon problème est que je veux aussi que les utilisateurs non authentifiés utilisent mon application, mais avec moins de fonctionnalités - je le fais avec la sécurité de la méthode et la vérification des rôles de l'utilisateur actuel dans l'interface utilisateur. Puis-je configurer le filtre afin qu'il ignore les demandes non authentifiées, mais si le jeton est présent l'utilise?Porte-clés avec sécurité vaadin et ressort

Merci

Daniel

+0

Pourriez-vous donner un exemple de ce que vous avez dans vos méthodes et l'interface utilisateur? Je n'ai pas utilisé Vaadin, mais AFAIK tout est fait là en utilisant Java (pas de structures basées sur XML pour les vues), n'est-ce pas? –

+0

Oui, tout est en Java. Il y a une servlet vaadin mappée à une url, "vaadin-pages" sont envoyées par ajax au navigateur – dve

+0

Ensuite, vous pouvez utiliser la manière standard d'accéder aux rôles en utilisant la sécurité de printemps, et envelopper vos morceaux de code de génération de vue dans des conditions pour rendre ce que vous veulent en fonction de quel type d'accès l'utilisateur a. –

Répondre

1

Un exemple concret de ce que vous voulez peut être trouvé dans le public-access branch of this github project. Il utilise cependant Vaadin 8.

Essentiellement, vous pouvez configurer votre application pour être en partie publique, soit accessiblement à l'utilisateur non authentifié pour certaines parties et nécessite la connexion pour les autres, comme suit:

@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()); 
    } 
... 
} 

La ligne http.anyRequest().permitAll(); est le plus important où vous configurez le filtre pour autoriser simplement toutes les demandes. Vous pouvez toujours mettre à jour ceci pour autoriser uniquement l'accès public à certaines URL.

Vous pouvez ensuite utiliser les annotations de sécurité de printemps sur les méthodes/vues/composants pour configurer votre contrôle d'accès précis. Par exemple:

@SpringComponent 
@Secured("ROLE_ANONYMOUS") 
public class LoginOperation implements Runnable { 
    @Override 
    public void run() { 
    // login logic 
    } 
} 

et

@Secured("ROLE_USER") 
public class LogoutOperation implements Runnable {  
    @Override 
    public void run() { 
    // logout logic 
    } 
}