我试图在我的应用程序中实现不同的角色,但我无法实现包含/排除不同角色的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();
我怎样才能做到这一点?
答案 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')");