我希望我的Spring-HATEOAS API应用程序(基于Spring-Boot和Spring-MVC构建)配置安全性,默认情况下所有端点/控制器方法都是拒绝的,并且只能通过方法注释显式授予访问权限。 / p>
我已经能够获得它所以注释控制所有访问,但如果开发人员忘记添加注释,匿名用户可以访问该方法。我希望开发人员必须明确注释(或做一些其他显式的开发操作)方法才能允许匿名访问。
也许我需要编写一个自定义的AccessDecisionManager,但我认为有理由怀疑默认情况下拒绝行为...我只需要转动右旋钮。
我用这样的事情徒劳地试图做到这一点:
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.hasRole("NOONEHASIT")
;
}
}
和控制器如:
@Controller
public class RootController {
@RequestMapping("/")
@PreAuthorize("hasRole('DEFAULT') or isAnonymous()")
public HttpEntity<RootResource> root(){
//stuff
}
}
认为没有人有这个角色,但这只是否认所有人。
谁有魔法酱?答案 0 :(得分:2)
如果没有明确允许您想要注释的路径,我无法想到是否可以这样做。因此,您需要另一个具有较低WebSecurityConfigurerAdapter
的过滤器链(即另一个Order
),该过滤器链明确允许访问您需要保护的所有路径。您可以将其自动化,例如使用@RequestMappings
查找@PreAuthorize
,但这将是繁琐的,我不确定它是否值得。
N.B。我不认为你需要在你的全能过滤器中不存在一个角色:你可以denyAll()
。