You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2005/05/22 19:14:29 UTC

cvs commit: jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters SavedRequestInputFilter.java

markt       2005/05/22 10:14:29

  Added:       http11/src/java/org/apache/coyote/http11/filters
                        SavedRequestInputFilter.java
  Log:
  Implement request body replay action.
  New input filter used to insert the request body.
  
  Revision  Changes    Path
  1.1                  jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters/SavedRequestInputFilter.java
  
  Index: SavedRequestInputFilter.java
  ===================================================================
  /*
   *  Copyright 1999-2005 The Apache Software Foundation
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  
  package org.apache.coyote.http11.filters;
  
  import java.io.IOException;
  
  import org.apache.coyote.InputBuffer;
  import org.apache.coyote.http11.InputFilter;
  import org.apache.tomcat.util.buf.ByteChunk;
  
  /**
   * Input filter responsible for replaying the request body when restoring the
   * saved request after FORM authentication.
   */
  public class SavedRequestInputFilter implements InputFilter {
  
  	/**
       * The original request body.
  	 */
      protected ByteChunk input = null;
  
      /**
       * Create a new SavedRequestInputFilter.
       * 
       * @param input The saved request body to be replayed.
       */
      public SavedRequestInputFilter(ByteChunk input) {
          this.input = input;
      }
  
      /**
       * Read bytes.
       */
      public int doRead(ByteChunk chunk, org.apache.coyote.Request request)
              throws IOException {
          int writeLength = 0;
          
          if (chunk.getLimit() > 0 && chunk.getLimit() < input.getLength()) {
              writeLength = chunk.getLimit();
          } else {
          	writeLength = input.getLength();
          }
          
          input.substract(chunk.getBuffer(), 0, writeLength);
          chunk.setOffset(0);
          chunk.setEnd(writeLength);
          
          return writeLength;
      }
  
      /**
       * Set the content length on the request.
       */
      public void setRequest(org.apache.coyote.Request request) {
          request.setContentLength(input.getLength());
      }
  
      /**
       * Make the filter ready to process the next request.
       */
      public void recycle() {
          input = null;
      }
  
      /**
       * Return the name of the associated encoding; here, the value is null.
       */
      public ByteChunk getEncodingName() {
          return null;
      }
  
      /**
       * Set the next buffer in the filter pipeline (has no effect).
       */
      public void setBuffer(InputBuffer buffer) {
      }
  
      /**
       * End the current request (has no effect).
       */
      public long end() throws IOException {
          return 0;
      }
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters SavedRequestInputFilter.java

Posted by Remy Maucherat <re...@apache.org>.
Mark Thomas wrote:
> I took a particularly paranoid view and set the default to 4k.

I see this was in the next commit. Great default.

Rémy

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters SavedRequestInputFilter.java

Posted by Mark Thomas <ma...@apache.org>.
Remy Maucherat wrote:
> Mark Thomas wrote:
> 
> If this still goes to the session, then the -1 is not justified. 

It does still go to the session.

> The 
> code is not done in a way that is very intuitive to me, so that's the 
> only issue then, and it's not relevant.

It wasn't that intuitive to me while I was trying to figure out how to 
do this either ;) - Bill's assistance was much appreciated for the JK stuff.

> I still have trouble with the concept of saving any POST data, which 
> tends to be far bigger than parameters (and retrospectively, I have 
> trouble allowing this many parameters). This would kill clustered 
> Tomcats setups. Could the default be a very small value (like 64KB or 
> something) ?

I took a particularly paranoid view and set the default to 4k.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters SavedRequestInputFilter.java

Posted by Remy Maucherat <re...@apache.org>.
Mark Thomas wrote:
> Remy Maucherat wrote:
> 
> The input filter is added to the processor during the processing of the 
> final request in the FORM authentication sequence and the data in it is 
> consumed during the processing of this request. There is no need for 
> this filter, or the data in it, to persist across multiple requests.
> 
> Data is persisted between requests (of course it has to be so FORM auth 
> can take place) but this is done in the session and therefore it does 
> not matter if the processor that handles the original request is 
> different from the one that handles the FORM auth request or the final 
> redirect to the original URL.
> 
> At the moment I do see what is so badly broken about this that justifies 
> a -1.

If this still goes to the session, then the -1 is not justified. The 
code is not done in a way that is very intuitive to me, so that's the 
only issue then, and it's not relevant.

I still have trouble with the concept of saving any POST data, which 
tends to be far bigger than parameters (and retrospectively, I have 
trouble allowing this many parameters). This would kill clustered 
Tomcats setups. Could the default be a very small value (like 64KB or 
something) ?

Rémy

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters SavedRequestInputFilter.java

Posted by Mark Thomas <ma...@apache.org>.
Remy Maucherat wrote:
> markt@apache.org wrote:
>>   Implement request body replay action.
>>   New input filter used to insert the request body.
> 
> This is probably not going to work with the APR protocol, since a 
> subsequent request may be processed by a different processor.
> 
> All this proves saving POST data is a severly broken concept. I would 
> like to get back to the previous situation, and have this whole thing 
> reverted.
> 
> As a result, here's my official -1 to all these POST data related changes.

The input filter is added to the processor during the processing of the 
final request in the FORM authentication sequence and the data in it is 
consumed during the processing of this request. There is no need for 
this filter, or the data in it, to persist across multiple requests.

Data is persisted between requests (of course it has to be so FORM auth 
can take place) but this is done in the session and therefore it does 
not matter if the processor that handles the original request is 
different from the one that handles the FORM auth request or the final 
redirect to the original URL.

At the moment I do see what is so badly broken about this that justifies 
a -1.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters SavedRequestInputFilter.java

Posted by Remy Maucherat <re...@apache.org>.
markt@apache.org wrote:
> markt       2005/05/22 10:14:29
> 
>   Added:       http11/src/java/org/apache/coyote/http11/filters
>                         SavedRequestInputFilter.java
>   Log:
>   Implement request body replay action.
>   New input filter used to insert the request body.

This is probably not going to work with the APR protocol, since a 
subsequent request may be processed by a different processor.

All this proves saving POST data is a severly broken concept. I would 
like to get back to the previous situation, and have this whole thing 
reverted.

As a result, here's my official -1 to all these POST data related changes.

Rémy

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org