私は2種類のRESTサービスを開発しています。RESTeasyのHTTPヘッダーに基づく代行受信
- ログイン前にセッショントークンはHTTPヘッダーに渡されません。
- ログインセッショントークンは、各リクエストで渡されます。
各RESTメソッドに@HeaderParamを含めたくありません。私はそれを最初に傍受したいと思って、私はセッションの正当性をチェックしたいと思っています。私はいくつかのメソッドに
感謝を傍受しないようにする方法RESTEasyの
- を教えてください。
私は2種類のRESTサービスを開発しています。RESTeasyのHTTPヘッダーに基づく代行受信
各RESTメソッドに@HeaderParamを含めたくありません。私はそれを最初に傍受したいと思って、私はセッションの正当性をチェックしたいと思っています。私はいくつかのメソッドに
感謝を傍受しないようにする方法RESTEasyの
私は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)
二つのアプローチ
が使用JAX-RS interceptorsがあります - あなたは、ヘッダー
使用古き良きJavaServletフィルタを読むことができるので、あなたは、インターセプタでリクエストオブジェクトへのアクセス権を持っている - それは問題ではないことJAX-RSを使用している場合は、RESTリクエストもフィルタリングできます。同様インターセプタに、フィルタは、HttpSessionのが存在する(request.getSession()
法)、それは属性が必要であったかどうかをチェックすることができ、両方の場合において情報
ヘッダた要求オブジェクトへのアクセスを有します。
リクエストパスを見て、Javaコードで設定またはプログラムでフィルタリングされたリクエストを含める/除外することができます。
Jerseyを使用している場合は、注釈「x」を作成し、アノテーションには@NameBindingを記述します。このフィルターにContainerRequestFilterを作成し、注釈 'x'を追加します。今すぐあなたのサービスを 'x'アノテーションで飾りましょう – jaks