Spring security 带vaadin和弹簧安全的钥匙斗篷

Spring security 带vaadin和弹簧安全的钥匙斗篷,spring-security,vaadin7,keycloak,Spring Security,Vaadin7,Keycloak,我想用KeyClope和spring security保护我的vaadin应用程序。我尝试使用“KeyClope spring安全适配器”。 我的问题是,我也希望未经验证的用户使用我的应用程序,但功能较少-我通过方法安全性和检查当前用户在UI中的角色来实现这一点 我是否可以配置筛选器,使其忽略未经身份验证的请求,但如果存在令牌,则使用它 谢谢 Daniel您想要的工作示例可以在中找到。但它确实使用了瓦丁8 本质上,您可以将应用程序设置为部分公开,即未经身份验证的用户可以访问某些部分,其他部分则需

我想用KeyClope和spring security保护我的vaadin应用程序。我尝试使用“KeyClope spring安全适配器”。 我的问题是,我也希望未经验证的用户使用我的应用程序,但功能较少-我通过方法安全性和检查当前用户在UI中的角色来实现这一点

我是否可以配置筛选器,使其忽略未经身份验证的请求,但如果存在令牌,则使用它

谢谢


Daniel

您想要的工作示例可以在中找到。但它确实使用了瓦丁8

本质上,您可以将应用程序设置为部分公开,即未经身份验证的用户可以访问某些部分,其他部分则需要登录,如下所示:

@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());
  }
...
}
http.anyRequest().permitAll()是最重要的,您可以将过滤器配置为只允许所有请求。您仍然可以将其更新为只允许公共访问某些URL

然后,您可以在方法/视图/组件上使用spring安全注释来配置细粒度访问控制。例如:

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


你能举例说明你的方法和用户界面中有什么吗?我没有使用Vaadin,但是AFAIK所有的事情都是用Java完成的(没有基于XML的视图结构),不是吗?是的,都是用Java完成的。有一个映射到一个url的vaadin servlet,“vaadin页面”由ajax发送到浏览器,然后您可以使用spring security访问角色的标准方式,并将视图生成代码片段包装到条件中,以根据用户具有的访问类型呈现所需内容。@XtremeBiker:这正是我要做的-我的问题是过滤器要么强制验证,要么忽略令牌。我想我在过滤器配置中做错了什么。
@Secured("ROLE_USER")
public class LogoutOperation implements Runnable {    
  @Override
  public void run() {
    // logout logic
  }
}