【发布时间】:2022-02-02 11:48:59
【问题描述】:
假设我想在我的应用程序上实现只读行为(不允许发布/放置)。我可以通过禁用这些类型/设置捕获任何端点上的请求的@POST/@PUT 来做到这一点吗? (而不是在我的应用程序中的每个帖子/帖子上都放置一个布尔标志
【问题讨论】:
-
代码中的示例将帮助我们理解您在说什么。
假设我想在我的应用程序上实现只读行为(不允许发布/放置)。我可以通过禁用这些类型/设置捕获任何端点上的请求的@POST/@PUT 来做到这一点吗? (而不是在我的应用程序中的每个帖子/帖子上都放置一个布尔标志
【问题讨论】:
您可以添加一个过滤器,禁止所有您不想支持的方法:
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.ext.Provider;
@Provider
public class AuthorizationRequestFilter implements ContainerRequestFilter {
private final List<String> disallowed=Arrays.asList("POST","PUT","DELETE","PATCH");
@Override
public void filter(ContainerRequestContext requestContext)
throws IOException {
if (disallowed.contains(requestContext.getMethod())){
requestContext.abortWith(Response
.status(Response.Status.FORBIDDEN)
.entity("User cannot modify the resource.")
.build());
}
}
}
【讨论】: