gpt4 book ai didi

java - RESTeasy中基于HTTP头的拦截

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:30 25 4
gpt4 key购买 nike

我正在开发两种类型的 REST 服务。

  • 登录前,不会将 session token 传递给 HTTP header 。
  • 登录后 session token 将在每个请求中传递。

我不想在每个 REST 方法中都包含 @HeaderParam。我想先拦截它,然后基于它我想检查 session 的有效性。请告诉我

  1. 我如何在 RESTEasy 中根据 header 进行拦截
  2. 如何避免拦截少数方法

谢谢。

最佳答案

我使用 PreProcessInterceptor 解决了这个问题

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Securable {
String header() default "session-token";
}

@Provider
@ServerInterceptor
public class ValidationInterceptor implements PreProcessInterceptor, AcceptedByMethod {

@Context
private HttpServletRequest servletRequest;

@Override
public boolean accept(Class clazz, Method method) {
return method.isAnnotationPresent(Securable.class);
}

@Override
public ServerResponse preProcess(HttpRequest httpRequest, ResourceMethod resourceMethod) throws Failure,
WebApplicationException {

Securable securable = resourceMethod.getMethod().getAnnotation(Securable.class);
String headerValue = servletRequest.getHeader(securable.header());

if (headerValue == null){
return (ServerResponse)Response.status(Status.BAD_REQUEST).entity("Invalid Session").build();
}else{
// Validatation logic goes here
}

return null;
}
}

注解@Securable将用于需要验证的REST服务。

@Securable
@PUT
public Response updateUser(User user)

关于java - RESTeasy中基于HTTP头的拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11549268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com