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

时间:2017-03-20 17:56:36

标签: spring groovy spring-security

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

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

 String[] publiclyAccessibleUris = new String[]{ "/home", "/user", "/profile/*", "location/**", "/products/*" };

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

 String[] publiclyAccessibleUrisForDenied = new String[]{ "/home", "/profile/*" };

这是我的代码:

 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();

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

最后,我按照以下方式解决,以便允许所有用户使用和ROLE_USER的所有网址,并且对于ROLE_SUSPENDED,我设置了我想要的网址。

    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')");