blob: b1779d7908c91176a6b046810f0a735822175438 [file] [log] [blame]
/*
* Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.glassfish.jersey.examples.managedclient;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.ws.rs.container.DynamicFeature;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.FeatureContext;
/**
*Dynamic feature that appends a properly configured {@link CustomHeaderFilter} instance
* to every method that is annotated with {@link Require @Require} internal feature
* annotation.
*
* @author Marek Potociar
*/
public class CustomHeaderFeature implements DynamicFeature {
/**
* A method annotation to be placed on those resource methods to which a validating
* {@link CustomHeaderFilter} instance should be added.
*/
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)
public static @interface Require {
/**
* Expected custom header name to be validated by the {@link CustomHeaderFilter}.
*/
public String headerName();
/**
* Expected custom header value to be validated by the {@link CustomHeaderFilter}.
*/
public String headerValue();
}
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
final Require va = resourceInfo.getResourceMethod().getAnnotation(Require.class);
if (va != null) {
context.register(new CustomHeaderFilter(va.headerName(), va.headerValue()));
}
}
}