java拦截http_WebLogic中拦截全局http请求

packagecom.yovn.labs.wls.protocol;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.lang.reflect.Field;importjava.net.Socket;importjava.net.SocketException;importweblogic.rjvm.NetworkChannel;importweblogic.servlet.internal.RequestParser;importweblogic.servlet.internal.ServletRequestImpl;importweblogic.socket.MaxMessageSizeExceededException;importweblogic.socket.MuxableSocket;importweblogic.utils.io.Chunk;/***@authoryovn

**/publicclassMuxableSocketHTTPimplementsMuxableSocket {privatefinalMuxableSocket delegate;//the internal implementationprivateField countF;privateField bufF;privateField sockF;/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#dispatch()*/publicvoiddispatch() {try{byte[] buf=(byte[])bufF.get(delegate);intcount=countF.getInt(delegate);

ServletRequestImpl servletrequestimpl=newServletRequestImpl();

RequestParser requestparser=newRequestParser(servletrequestimpl,buf, count);if(requestparser.parse()<0)

{

Socket sock=(Socket)sockF.get(delegate);

OutputStream out=sock.getOutputStream();

sendError(out,500,"Internal error");

out.close();return;

}

String accessV=servletrequestimpl.getHeader("access");if(accessV==null)

{

Socket sock=(Socket)sockF.get(delegate);

OutputStream out=sock.getOutputStream();

sendMessage(out,"You have not set 'access' header");

out.close();return;

}//System.out.println("+================================request first Line:"+servletrequestimpl.getFirstLine()+",request:"+servletrequestimpl.getRequestURI());}catch(Exception e) {

e.printStackTrace();

}

delegate.dispatch();

}voidsendMessage(OutputStream out,String msg)throwsIOException

{

String s="HTTP/1.1"+200+"OK\r\n\r\n";

out.write(s.getBytes());

out.write(msg.getBytes());

out.flush();

}voidsendError(OutputStream out,intcode,String msg)throwsIOException

{

String s="HTTP/1.1"+code+""+msg+"\r\n\r\n";

out.write(s.getBytes());

out.flush();

}publicMuxableSocketHTTP(Chunk chunk1, Socket socket, NetworkChannel networkchannel)throwsIOException

{//create our delegation firstdelegate=newweblogic.servlet.internal.MuxableSocketHTTP(chunk1,socket,networkchannel);//initiate private fieldstry{

countF=weblogic.servlet.internal.MuxableSocketHTTP.class.getDeclaredField("count");

bufF=weblogic.servlet.internal.MuxableSocketHTTP.class.getDeclaredField("buf");

sockF=weblogic.servlet.internal.MuxableSocketHTTP.class.getDeclaredField("sock");

sockF.setAccessible(true);

countF.setAccessible(true);

bufF.setAccessible(true);

}catch(SecurityException e) {//TODO Auto-generated catch blocke.printStackTrace();

}catch(NoSuchFieldException e) {//TODO Auto-generated catch blocke.printStackTrace();

}

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#endOfStream()*/publicvoidendOfStream() {

delegate.endOfStream();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getBuffer()*/publicbyte[] getBuffer() {returndelegate.getBuffer();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getBufferOffset()*/publicintgetBufferOffset() {returndelegate.getBufferOffset();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getCompleteMessageTimeoutMillis()*/publicintgetCompleteMessageTimeoutMillis() {returndelegate.getCompleteMessageTimeoutMillis();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getIdleTimeoutMillis()*/publicintgetIdleTimeoutMillis() {returndelegate.getIdleTimeoutMillis();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getMaxMessageSize()*/publicintgetMaxMessageSize() {returndelegate.getMaxMessageSize();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getRawSocket()*/publicSocket getRawSocket() {returndelegate.getRawSocket();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getReRegisterMX()*/publicMuxableSocket getReRegisterMX() {returndelegate.getReRegisterMX();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getSocket()*/publicSocket getSocket() {returndelegate.getSocket();

}publicvoidensureForceClose() {

delegate.ensureForceClose();

}publicbooleanisClosed() {returndelegate.isClosed();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#getSocketInputStream()*/publicInputStream getSocketInputStream() {returndelegate.getSocketInputStream();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#hasException(java.lang.Throwable)*/publicvoidhasException(Throwable arg0) {

delegate.hasException(arg0);

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#incrementBufferOffset(int)*/publicvoidincrementBufferOffset(intarg0)throwsMaxMessageSizeExceededException {

delegate.incrementBufferOffset(arg0);

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#isMessageComplete()*/publicbooleanisMessageComplete() {returndelegate.isMessageComplete();

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#setReRegisterMX(weblogic.socket.MuxableSocket)*/publicvoidsetReRegisterMX(MuxableSocket arg0) {

delegate.setReRegisterMX(arg0);

}/*(non-Javadoc)

* @see weblogic.socket.MuxableSocket#setSoTimeout(int)*/publicvoidsetSoTimeout(intarg0)throwsSocketException {

delegate.setSoTimeout(arg0);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值