@Provider
public class AuthFilter implements ContainerRequestFilter{
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
// business logic
}
}
您可以考虑使用名称绑定筛选器来选择您的筛选器将绑定到的endpoint,而不是从全局筛选器中排除URI。
对于一些带有名称绑定筛选器的示例,也请查看此答案。
如果您仍然喜欢全局筛选方法,可以考虑使用uriinfo
接口来获取关于所请求URI的详细信息。使用以下方法之一获取uriinfo
的实例:
@Provider
public class AuthFilter implements ContainerRequestFilter {
@Context
private UriInfo info;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
...
}
}
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
UriInfo info = requestContext.getUriInfo();
...
}
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
UriInfo info = requestContext.getUriInfo();
if (!info.getPath().contains("secured")) {
return;
}
}
另一种方法是动态绑定。它允许您以动态的方式为资源方法分配过滤器和拦截器。上面提到的名称绑定使用静态方法,对绑定的更改需要更改源代码和重新编译。通过动态绑定,您可以实现在应用程序初始化期间定义绑定的代码。
下面摘自Jersey文档的示例展示了如何实现动态绑定:
@Path("helloworld")
public class HelloWorldResource {
@GET
@Produces("text/plain")
public String getHello() {
return "Hello World!";
}
@GET
@Path("too-much-data")
public String getVeryLongString() {
String str = ... // very long string
return str;
}
}
// This dynamic binding provider registers GZIPWriterInterceptor
// only for HelloWorldResource and methods that contain
// "VeryLongString" in their name. It will be executed during
// application initialization phase.
public class CompressionDynamicBinding implements DynamicFeature {
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
if (HelloWorldResource.class.equals(resourceInfo.getResourceClass())
&& resourceInfo.getResourceMethod().getName().contains("VeryLongString")) {
context.register(GZIPWriterInterceptor.class);
}
}
}
绑定是使用实现DynamicFeature
接口的提供程序完成的。该接口定义了一个带有两个参数的configure
方法,resourceinfo
和featurecontext
。
在Jersey 1.x中,我们从一个(Jersey)会话属性访问Wicket会话,如这里https://stackoverflow.com/a/15767824/1399659.所述 在迁移到Jersey 2.x时,使用ContainerRequestFilter似乎是合适的模式,它还允许Springbean注入。我们通过包括 作为 Servlet 容器的初始化参数,并在容器请求筛选实现上使用@P
ExtendedService内部: 但是当我开始时,我得到无效的Bean定义,因为myService是绑定错误。如何排除原来的MyService? 例外情况: 原因:org.springframework.beans.factory.support.beandefinitionoverrideException:URL[file:svc.xml]中定义的名为“My Service”的bean定义
如何防止用户在“JTextField”中输入某些字符,如果输入该字符,则不要在文本字段中显示它
我正在使用Android Studio和Google Drive,这会使隐藏的系统文件可见(例如图标和桌面ini),导致错误,如本文所述。我希望指示gradle 2.14忽略它们,而不是运行脚本来删除这些文件。 为了找出如何排除文件,我在目录和中创建了名为“excludeme.txt”的文件。我尝试对项目中的两个文件进行各种修改,但没有成功排除该文件。 具体来说,我对的文件进行了以下修改: 我还将
我有灰熊提供的球衣。 我有一个实现类。但是,为所有传入请求创建一次此类。因此,这样做: 为空。我可以将上下文注入到被调用的实际endpoint中,但这相当粗糙和丑陋,对我来说真的没有用;因为我希望记录各种请求。理想情况下,希望在请求的ResponseFilter端找到这个对象。 必须有一种简单的方法来做到这一点。到目前为止,我看到的所有问题/答案都不适用于灰熊,或者注入了RESTendpoint调
本文向大家介绍从MySQL的SHOW COLUMNS中排除某些列?,包括了从MySQL的SHOW COLUMNS中排除某些列?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个演示表 现在,您可以在desc命令的帮助下检查表的描述。查询如下- 以下是输出 这是从SHOW COLUMNS中排除某些列的查询。您需要排除“ StudentAge”和“ StudentMarks”列。查询如下-