我使用Spring编写了一组休息Web服务,但是无法使用Spring安全性为某些逻辑配置它。 我有这些类型的资源:
我对上一个要求有疑问。我尝试过以下方法:
http
.authorizeRequests()
.antMatchers("/resource1").permitAll()
.antMatchers(HttpMethod.GET, "/resource2").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")
.antMatchers(HttpMethod.GET, "/resource3").hasAuthority("ROLE_ADMIN")
.antMatchers(HttpMethod.GET, "/resource4").not().hasAuthority("ROLE_USER")
.anyRequest().fullyAuthenticated()
.and().requestCache().requestCache(new NullRequestCache())
.and().httpBasic().authenticationEntryPoint(authenticationEntryPoint)
.and().csrf().disable();
此代码与我需要的代码最相似:
但问题是“resource4”...如果用户经过身份验证,一切正常(只有没有任何角色的用户才能访问该资源)...问题是Spring允许访问非认证用户(因为我认为它认为它们不属于USER规则,这是正确的)
如何将资源配置为某些角色无法访问,但是必须进行身份验证?
答案 0 :(得分:1)
您可以使用.access(String expression)
它允许指定URL由任意表达式保护
表达式= "不是(hasRole(' USER'))和isAuthenticated()"
导致
http
.authorizeRequests()
.antMatchers("/resource1").permitAll()
.antMatchers(HttpMethod.GET, "/resource2").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")
.antMatchers(HttpMethod.GET, "/resource3").hasAuthority("ROLE_ADMIN")
.antMatchers(HttpMethod.GET,"/resource4").access("not( hasRole('USER') ) and isAuthenticated()")