我正在尝试使用Tomcat 7和名称绑定实现这里的Jersey 2.3拦截器示例。我已经根据链接中显示的示例创建了以下内容。。。
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Compress{}
和
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
final OuputStream outputStream .....
..some logging added here..
}
和
java prettyprint-override">@Path("helloword")
public class HelloWorldResource {
@GET
@Path("to-much-data")
@Compress
public String getVeryLongString(){
String str = "a very ...
..... large string";
return str;
}
}
我没有在网络上添加任何额外内容。xml来注册拦截器,因为这在用户指南文档中没有讨论。我注意到这是早期版本Jersey中使用的方法。
我测试了压缩拦截器是否使用从泽西客户端api构建的客户端工作。我已经确保了HttpHeaders。ACCEPT_ENCODING,“gzip”
Header被添加到调用。在发送请求之前的Builder
。我还将日志记录添加到GZIPWriterInterceptor
。当我测试以查看响应是否被压缩时,它会以纯文本形式返回(Content-Type-text/平原
在响应标头中设置)并且我没有在日志中看到GZIPWriterInterceptor
消息。
有人知道我做错了什么或者我还能尝试什么吗?
编辑-我更新了我的网站。xml尝试注册GZIPWriterInterceptor类。
......
.
<servlet>
<servlet-name>Jersey Test Servlet</servlet-name>
<servlet-value>org.glassfish.jersey.servlet.ServletContainer</servlet-value>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.jersey</param-value>
</init-param>
<init-param>
<param-name>com.ws.rs.ext.WriterInterceptor</param-name>
<param-value>com.test.jersey.GZIPWriterInterceptor</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
.
.......
这不起作用。我是否使用WriterInterceptor或其他参数名称注册GZIPWriterInterceptor?
更新-我通过扩展javax成功地实现了压缩。ws。rs.core。应用程序并注册我需要的每个类(HelloWorldResource.class、GZIPWriterInterceptor.class、Compress.class),如这里的部署无关应用程序模型所述。
我在网上注册了我的应用程序类。xml。。。
<display-name>JerseyInterceptorTest2</display-name>
<servlet>
<servlet-name>Jersey Rest Test</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.jersey.test.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Rest Test</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我尝试按照示例4.2扩展ResourceConfig来注册我的包,但没有成功。通过早期的网络方法。xml
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.jersey</param-value>
</init-param>
目前还不清楚为什么包裹注册不起作用。
确保所有类(Compress、GZIPWriterInterceptor、HelloWorldResource)都位于web中参数“jersey.config.server.provider.packages”指定的相同包下。xml。
我突然想到,@NameBinding不起作用,我发现我把压缩文件放在了另一个包中。
拦截器类也必须用提供者进行注释,如下所示:
@Provider
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor { ...
然后,这将在包扫描中被拾取。
这里的文档没有明确指定。
您需要做两件事:
本文向大家介绍SpringBoot拦截器实现登录拦截的方法示例,包括了SpringBoot拦截器实现登录拦截的方法示例的使用技巧和注意事项,需要的朋友参考一下 源码 GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-interceptor01 SpringBoot拦截器可以做什么 可以对UR
本文向大家介绍springmvc拦截器登录验证示例,包括了springmvc拦截器登录验证示例的使用技巧和注意事项,需要的朋友参考一下 一开始,学了拦截器与过滤器,咋一看两者有点像,实际上两者有很大的不同。就用拦截器和过滤器分别做了登录验证试验,这次先说拦截器。下面是自己实践的一个实例: 在spring-mvc.xml中配置拦截器: 如上所示,这里配置了LoginIntercepter,为了简单起
现在,当我到达spring-boot应用程序的endpoint时,它工作得很好 基本上,它根本不调用preandle。我错过了什么????
主要内容:1. 动作,2. JSP页面,3. 执行和等待拦截器,4. 示例,参考在Struts2中附带一个名为“execAndWait”一个非常有趣的“执行和等待”拦截器,这是一个非常方便的拦截器长时间运行操作在后台,显示用户的自定义的等待页面。在本教程中,它显示了一个完整的使用 Struts2 execAndWait 拦截器的例子。 1. 动作 一个普通的动作类,有一个长时间运行进程,证明了execAndWait效果。 LongProcessAction.java 2. J
easyopen在1.3.1版本开始支持拦截器。 easyopen拦截器实现原理跟springmvc拦截器类似,拦截器作用在api方法上,即有@Api注解的方法。 拦截器定义如下: /** * 拦截器,原理同springmvc拦截器 * @author tanghc * */ public interface ApiInterceptor { /** * 预处理回调方法,
你可以配置处理器拦截器HandlerInterceptors或web请求拦截器WebRequestInterceptors等拦截器,并配置它们拦截所有进入容器的请求,或限定到符合特定模式的URL路径。 在MVC Java编程配置下注册拦截器的方法: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigure