This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.lang.annotation.ElementType; | |
import java.lang.annotation.Retention; | |
import java.lang.annotation.RetentionPolicy; | |
import java.lang.annotation.Target; | |
import javax.ws.rs.NameBinding; | |
@NameBinding | |
@Target({ElementType.TYPE,ElementType.METHOD}) | |
@Retention(value=RetentionPolicy.RUNTIME) | |
public @interface Logged { | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javax.ws.rs.container.ContainerRequestContext; | |
import javax.ws.rs.container.ContainerRequestFilter; | |
import javax.ws.rs.container.ContainerResponseContext; | |
import javax.ws.rs.container.ContainerResponseFilter; | |
import javax.ws.rs.core.MultivaluedMap; | |
import javax.ws.rs.core.UriInfo; | |
import javax.ws.rs.ext.Provider; | |
import java.io.IOException; | |
@Provider | |
@Logged | |
public class LogFilter implements ContainerRequestFilter, ContainerResponseFilter { | |
@Override | |
public void filter(ContainerRequestContext reqContext) throws IOException { | |
System.out.println("-- req info --"); | |
UriInfo uriInfo = reqContext.getUriInfo(); | |
log(uriInfo, reqContext.getHeaders()); | |
} | |
@Override | |
public void filter(ContainerRequestContext reqContext, | |
ContainerResponseContext resContext) throws IOException { | |
System.out.println("-- res info --"); | |
UriInfo uriInfo = reqContext.getUriInfo(); | |
log(uriInfo, resContext.getHeaders()); | |
} | |
private void log(UriInfo uriInfo, MultivaluedMap<String, ?> headers) { | |
System.out.println("Path: " + uriInfo.getPath()); | |
headers.entrySet().forEach(h -> System.out.println(h.getKey() + ": " + h.getValue())); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javax.ws.rs.GET; | |
import javax.ws.rs.Path; | |
import javax.ws.rs.PathParam; | |
@Path("/customers") | |
public class MyResource { | |
@GET | |
public String getAllCustomers() { | |
System.out.println("in getAllCustomers()"); | |
return "dummy-response for all customers"; | |
} | |
@Logged | |
@GET | |
@Path("{id}") | |
public String getCustomerById(@PathParam("id") String id) { | |
System.out.println("in getCustomerById()"); | |
return "dummy-response for customer " + id; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javax.ws.rs.ApplicationPath; | |
import javax.ws.rs.core.Application; | |
@ApplicationPath("/") | |
public class ApplicationConfig extends Application{ | |
} |
Çıktımız ise şu şekilde olacak.Sadece GET/customers gibi bir istekte sunucumuza herhangi bir ek kayıt düşmeyecek.Yani filter kullanılmayacak fakat eğer GET/customers/{id} gibi bir istek gelirse filter kullanılacak.Aşağıdaki görsellerde de çok açık bir şekilde görünüyor.
Bu işi dinamik olarakta gerçekleştirebiliriz.Yani aynı şekilde istediğimiz alanlar için bir filter yazmak istiyorsak,dynamicfeature interfaceni imlement edip gerekli kontrolleri yapamız gerekir.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javax.ws.rs.container.DynamicFeature; | |
import javax.ws.rs.container.ResourceInfo; | |
import javax.ws.rs.core.FeatureContext; | |
import javax.ws.rs.ext.Provider; | |
import java.lang.reflect.Method; | |
@Provider | |
public class FilterRegistrationFeature implements DynamicFeature { | |
@Override | |
public void configure(ResourceInfo resourceInfo, FeatureContext context) { | |
if (MyResource.class.isAssignableFrom(resourceInfo.getResourceClass())) { | |
Method method = resourceInfo.getResourceMethod(); | |
if (method.getName().toLowerCase().contains("order")) { | |
System.out.println("registering LogFilter"); | |
context.register(new LogFilter()); | |
} | |
} | |
} | |
} |
Umarım faydalı olmuştur.Sağlıcakla kalın.
Hiç yorum yok:
Yorum Gönder