私たちがフィルタを使ってログ処理を行う場合、一般的なフィルタの符号化方式はすべての方法に対してフィルタリングを行い、もし私たちがユーザーの特定の他のアクセス行為を監視し、ユーザーのアクセス記録を記録する必要があるならば、今のフィルタの書き方は私たちの需要を満たすことができません.Jerseyフレームワークでは、名前バインドと呼ばれるフィルタの役割範囲を指定するために特定の注釈を使用できます.名前バインド注記@NameBingding注記を使用して、クラスレベルおよびメソッドレベルを定義する実行時のカスタム注記を定義します.
/**
* Created by Administrator on 2017/3/14.
*/
@NameBinding //
@Target({ElementType.TYPE,ElementType.METHOD}) //
@Retention(value = RetentionPolicy.RUNTIME) //
public @interface UserLog {
}
-
import cn.lx.annotation.UserLog;
import javax.annotation.Priority;
import javax.ws.rs.Priorities;
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.ext.Provider;
import java.io.IOException;
/**
* Created by Administrator on 2017/3/14.
*/
@UserLog //
@Provider //
@Priority(Priorities.USER) //
public class LoggerFilter implements ContainerRequestFilter,ContainerResponseFilter{
//
public void filter(ContainerRequestContext requestContext) throws IOException {
// ,
System.out.println(" ");
}
//
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
//
System.out.println(" ");
}
}
-
-
package cn.lx.resource;
import cn.lx.annotation.UserLog;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
/**
* Created by Administrator on 2017/3/14.
*/
@Path("/test")
public class TestResource {
@GET
@Path("/test1")
public String get1(){
return "test1";
}
@UserLog
@GET
@Path("/test2")
public String get2(){
return "test2";
}
}
- Aoolication
-
@ApplicationPath("/")
public class Application extends ResourceConfig{
public Application() {
/*
* */
packages("cn.lx.resource");
/**
*
*/
packages("cn.lx.filter");
}
}
-
- , /test/test1 , /test/test2