为不同 URL 的多个角色授权请求

JpC*_*row 3 groovy spring spring-security

我正在尝试在我的应用程序中实现不同的角色,但我无法实现包含/排除不同角色的 URL。

例如,我希望具有角色ROLE_USER和匿名用户的用户可以访问以下端点:

 String[] publiclyAccessibleUris = new String[]{ "/home", "/user", "/profile/*", "location/**", "/products/*" };
Run Code Online (Sandbox Code Playgroud)

我希望具有角色的ROLE_DENIED用户只能访问以下端点:

 String[] publiclyAccessibleUrisForDenied = new String[]{ "/home", "/profile/*" };
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

 http
     .sessionManagement()
         .sessionCreationPolicy(STATELESS)
         .and()
     .anonymous()
         .and()
     .authorizeRequests()
         .antMatchers(publiclyAccessibleUris).hasRole("USER")
         .anyRequest().permitAll()
         .antMatchers(publiclyAccessibleUrisForDenied).hasRole("DENIED")
         .anyRequest().permitAll()
         .antMatchers("/**").hasRole("DENIED")
         .anyRequest().denyAll();
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

JpC*_*row 5

最后,我按照以下方式解决了问题,以便允许所有具有 anon o ROLE_USER 的用户使用所有 url,而对于 ROLE_SUSPENDED,我设置了我想要的所有 URL。

    http
            .sessionManagement().sessionCreationPolicy(STATELESS)
    .and()
            .anonymous()
    .and()
            .authorizeRequests()
                    .antMatchers(publiclyAccessibleUris).permitAll()
                    .antMatchers(publiclyAccessibleUrisForDenied).access("hasRole('ROLE_DENIED') or hasAuthority('DENIED') OR hasRole('ROLE_USER') or hasAuthority('USER')")
                    .anyRequest().access("hasRole('ROLE_USER') or hasAuthority('USER')");
Run Code Online (Sandbox Code Playgroud)