1filter写法

先定义自己的responseWrapper

chain.doFilter(request,responseWrapper);

responseWrapper来输出

package water;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class WaterMarkFilter implements Filter { private String waterMarkFile; @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletResponse myResponse = (HttpServletResponse) response;
HttpServletRequest myRequest = (HttpServletRequest) request;
WaterMarkResponseWrapper waterMarkResponse = new WaterMarkResponseWrapper(
myResponse, waterMarkFile);
chain.doFilter(myRequest, waterMarkResponse);
waterMarkResponse.finishResponse();
} @Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
String file = filterConfig.getInitParameter("waterMarkFile");
waterMarkFile = filterConfig.getServletContext().getRealPath(file);
} }

2WaterMarkResponseWrapper写法(自己定义的responseWrapper

重写自己的getOutputStream(也是自己定义的

finish()函数,处理水印函数

package water;

import java.io.IOException;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper; import util.ImageUtil; public class WaterMarkResponseWrapper extends HttpServletResponseWrapper { private String waterMarkFile;
private HttpServletResponse response;
private WaterMarkOutputStream waterMarkOutputStream = new WaterMarkOutputStream(); public WaterMarkResponseWrapper(HttpServletResponse response,
String waterMarkFile) throws IOException {
super(response);
this.response = response;
this.waterMarkFile = waterMarkFile;
} public void finishResponse() throws IOException {
// TODO Auto-generated method stub
byte[] imageData = waterMarkOutputStream.getByteArrayOutputStream()
.toByteArray();
byte[] image = ImageUtil.waterMark(imageData, waterMarkFile);
response.setContentLength(image.length);
response.getOutputStream().write(image);// 用原来的response输出的浏览器
waterMarkOutputStream.close(); } public ServletOutputStream getOutputStream() throws IOException {
return waterMarkOutputStream;
} public void flushBuffer() throws IOException {
waterMarkOutputStream.flush();
} }

3WaterMarkOutputStream(自定义的ServletOutputStream

内置一个ByteArrayOutputStream缓冲图片数据

重写write这些方法

原码

package water;

import java.io.ByteArrayOutputStream;
import java.io.IOException; import javax.servlet.ServletOutputStream; public class WaterMarkOutputStream extends ServletOutputStream { private ByteArrayOutputStream byteArrayOutputStream; @Override
public void write(int b) throws IOException {
// TODO Auto-generated method stub
byteArrayOutputStream.write(b);
} public WaterMarkOutputStream() throws IOException {
byteArrayOutputStream = new ByteArrayOutputStream();
} public void close() throws IOException {
byteArrayOutputStream.close();
} public void flush() throws IOException {
byteArrayOutputStream.flush();
} public void write(byte[] b, int off, int len) throws IOException {
byteArrayOutputStream.write(b, off, len);
} public void write(byte[] b) throws IOException {
byteArrayOutputStream.write(b);
} public ByteArrayOutputStream getByteArrayOutputStream() {
return byteArrayOutputStream;
}
}

filter添加水印的更多相关文章

  1. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  2. JavaWeb之Filter过滤器

    原本计划这一篇来总结JSP,由于JSP的内容比较多,又想着晚上跑跑步减减肥,所以今天先介绍Filter以及它的使用举例,这样的话还有些时间可以锻炼锻炼.言归正传,过滤器从字面理解她的话有拦网.过滤的功 ...

  3. 由于开发需求需要在附件查看页面添加水印,于是网上看到一位大牛写了一个js加水印的方法觉得很实用,也很方便,记录一下,哈哈

    大牛的博客链接:https://www.cnblogs.com/daixinyu/p/6715398.html 提供给大家学习 我优化了几点 1,我把水印的样式单独提出来,这样会提高渲染水印的性能 2 ...

  4. 第六章 过滤器Filter

    Filter概述 Filter不用于客户端请求,只用于对request,response进行修改或对context,session,request事件进行监听. 1.概述 如上图,多个filter组成 ...

  5. ffmpeg一些filter用法、以及一些功能命令

    来源:http://blog.csdn.net/dancing_night/article/details/46776903 1.加字幕 命令:ffmpeg -i <input> -fil ...

  6. Servlet高级部分Filter(过滤器)

    一:Filter称之为"过滤器",用在Servlet外,对request和response进行修改.它是AOP(面向切面编程思想的一种体现),Filter中有一个FilterCha ...

  7. js为页面元素添加水印

    近期有需求为页面部分区域添加上水印,通过在网上找到了js为页面添加水印的方法,后来经过自己的改进,可以实现为页面部分元素添加水印,最终效果如下图: 代码如下: function watermark(s ...

  8. ffmpeg 视频教程 添加水印附源码

    本文主要讲述如何利用Ffmpeg向视频文件 添加水印这一功能,文中最后会给出源代码下载地址以及视频 下载地址,视频除了讲述添加水印的基本原理以及代码实现,还提到了要注意的一些地方,因为直接运行 dem ...

  9. PHP-生成缩略图和添加水印图-学习笔记

    1.开始 在网站上传图片过程,经常用到缩略图功能.这里我自己写了一个图片处理的Image类,能生成缩略图,并且可以添加水印图. 2.如何生成缩略图 生成缩略图,关键的是如何计算缩放比率. 这里,我根据 ...

随机推荐

  1. App压力测试MonkeyRunner整理

    压力测试结果:CRASH:崩溃,应用程序在使用过程中,非正常退出ANR:Application Not Responding 命令很多,不用死记,用到复制.粘贴就行,达到目的最重要. 简单通俗易懂点讲 ...

  2. 1029: [JSOI2007]建筑抢修 贪心

    https://www.lydsy.com/JudgeOnline/problem.php?id=1029 题意:n个建筑,每个有修复时间和爆炸时间,没有在爆炸时间内修复就会爆炸,问最多能修复的建筑 ...

  3. halocn/C++ (第一篇)

        在使用C++编写halcon之前,确定自己有较好的C++基础,并熟悉一套开发平台如VC   Programmers_guide.pdf chapter7中有关于creating Aplicat ...

  4. uname命令行

    常用命令uname -v # uname -i #uname -a dream361@master:~$ uname -n #主机名称 master dream361@master:~$ uname ...

  5. qml 关于鼠标穿透的问题

    最近在开发过程中,遇到了鼠标穿透的问题.结合网上给予的方法,都试了一圈,在这里总结一下: import QtQuick 2.9import QtQuick.Window 2.2import QtQui ...

  6. 解决chrome报Not allowed to load local resource错误的方法

    最近项目中遇到了关于图片的更改->保存->本地读取 在本地读取的环节上面出现了错误,一开始用的是直接本地路径,但是在页面上调试的出现了下面的错误,他的路径还是相对路径,下图所示: Goog ...

  7. WAF的实现

    文章来源:http://danqingdani.blog.163.com/blog/static/1860941952014101723845500/ 本篇文章从WAF产品研发的角度来YY如何实现一款 ...

  8. iOS实现程序长时间未操作退出

    大部分银行客户端都有这样的需求,在用户一定时间内未操作,即认定为token失效,但未操作是任何判定的呢?我的想法是用户未进行任何touch时间,原理就是监听runloop事件.我们需要进行的操作是创建 ...

  9. [置顶] Retrofit2 初印象?

    鄙人由于工作繁忙很久没写博客了还望大家谅解!之前csdn登不上,算了不说借口了,retrofit2相信已经很火了吧,而且上手也比较容易,之前可能大家都是用Volley,Okhttp.Okhttp3其实 ...

  10. Shell 单行注释和多行注释