如何使用Spring保护REST web服务,删除是可能的,尽管我不知道';它不是作者写的
我正在Spring中设置一个安全配置,我希望只有用户可以访问我在配置中编写的资源。如果我没有编写如何使用Spring保护REST web服务,删除是可能的,尽管我不知道';它不是作者写的,spring,spring-security,Spring,Spring Security,我正在Spring中设置一个安全配置,我希望只有用户可以访问我在配置中编写的资源。如果我没有编写DELETE我不希望任何用户可以使用此请求,例如, 这是最严格的限制,除非我加上它。我应该在代码上更改什么 我编写了下一个代码GET和POST可以,但我可以删除,不添加此授权 @配置 @启用Web安全性 @EnableGlobalMethodSecurity(Prespenabled=true) 公共类SecurityJavaConfig扩展WebSecurity配置适配器{ @凌驾 受保护的无效配置
DELETE
我不希望任何用户可以使用此请求,例如,
这是最严格的限制,除非我加上它。我应该在代码上更改什么
我编写了下一个代码GET
和POST
可以,但我可以删除,不添加此授权
@配置
@启用Web安全性
@EnableGlobalMethodSecurity(Prespenabled=true)
公共类SecurityJavaConfig扩展WebSecurity配置适配器{
@凌驾
受保护的无效配置(AuthenticationManagerBuilder auth)引发异常{
认证
.inMemoryAuthentication()
.withUser(“用户”)
.password(编码器().encode(“passExample”))
.角色(“用户”);
}
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http
.httpBasic()
.及()
.csrf()
.disable()
.授权请求()
.antMatchers(HttpMethod.GET,“/**”).hasRole(“用户”)
.antMatchers(HttpMethod.POST,“/**”).hasRole(“用户”)
.及()
.formLogin()
.permitAll();
....
我希望如果我使用DELETE
发出请求,应用程序将不允许,因为我没有授权它
curl -X Delete locahost/servicio/1
但实际输出为状态204。服务器已成功处理该请求。您配置的是任何
GET
和POST
对任何端点的请求都应具有用户角色role\u user
,并预处理所有其他类型的请求,如(DELETE
、HEAD
、PUT
)等)。尝试拒绝所有其他类型的请求
.antMatchers(“/**”).denyAll();
或
.anyRequest().denyAll();
请注意,这里的顺序很重要。如果您在
GET
或POST
请求之前指定此项,则所有请求都将被拒绝。您必须限制任何其他请求,请参阅:
6.4授权请求
我们的示例只要求对用户进行身份验证,并且已经对应用程序中的每个URL进行了身份验证。我们可以通过向http.authorizeRequests()方法添加多个子项来指定URL的自定义要求。例如:
protectedvoid配置(HttpSecurity http)引发异常{
http
.authorized请求()1
.antMatchers(“/resources/**”,“/signup”,““/about”).permitAll()2
.antMatchers(“/admin/**”).hasRole(“admin”)3
.antMatchers(“/db/**”).access(“hasRole('ADMIN')和hasRole('DBA'))4
.anyRequest().authenticated()5
.及()
// ...
.formLogin();
}
public ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry denyAll()
指定任何人都不允许URL
您修改的代码:
@覆盖
受保护的无效配置(HttpSecurity http)引发异常{
http
.httpBasic()
.及()
.csrf()
.disable()
.授权请求()
.antMatchers(HttpMethod.GET,“/**”).hasRole(“用户”)
.antMatchers(HttpMethod.POST,“/**”).hasRole(“用户”)
.anyRequest().denyAll()
.及()
.formLogin()
.permitAll();
}
public ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry denyAll()