I figured out the issue by default *mapperContextRootRedirectEnabled is
true* hence it was redirecting it.  By setting it false, I was able to get
controller to filter.

<Context *mapperContextRootRedirectEnabled="false"*

Mark and everyone thanks for your help!

Thanks,

Bhavesh

On Mon, Oct 10, 2022 at 1:56 PM Bhavesh Mistry <mistry.p.bhav...@gmail.com>
wrote:

> Hi Mark ,
>
> Thank you for your feedback.  I have made all the changes needed and it is
> working as expected except for ONE use case where the servlet context path
> does not end with */*.  When server context path is given without /
> ('/versa'), tomcat seems to do 302 redirect to automatically  '/versa/'.
> How can I change this behavior so that the OPTIONS method returns 405 from
> the filter instead of tomcat auto-redirecting to the context path?
>
> curl -i -k -X OPTIONS http://10.43.243.8*/versa*
> HTTP/1.1 302
> Location: /versa/
> Transfer-Encoding: chunked
>
> curl -i -k -X OPTIONS http://10.43.243.8*/versa/*
> HTTP/1.1 405
> Cache-Control: private
> Content-Length: 0
>
>
>
> Here is the updated web.xml security containers:
>
>     <security-constraint>
>         <web-resource-collection>
>             <web-resource-name>HTTPSOnly</web-resource-name>
>             <url-pattern>/*</url-pattern>
>         </web-resource-collection>
>     </security-constraint>
>     <security-constraint>
>         <auth-constraint>
>             <!-- empty constraint: forbid all access -->
>         </auth-constraint>
>     </security-constraint>
>
> Thanks in advance for your help.
>
> Thanks,
>
> Bhavesh
>
>
>
>
> On Fri, Oct 7, 2022 at 12:06 PM Mark Thomas <ma...@apache.org> wrote:
>
>> On 07/10/2022 19:47, Bhavesh Mistry wrote:
>> > Hi Mark,
>> >
>> > Thank you for your quick response.  Your proposed solution works by
>> > removing the transport-guarantee element.  Another quick question, I
>> have
>> > Connection has a property called allowTrace method. Is it possible to
>> > configure TOMCAT Connector to disallow TRACE,OPTIONS,HEAD,CONNECT rather
>> > than having custom logic at the application level?
>>
>> No.
>>
>> >  Do you think it good idea to have Connector Config which method to
>> allow and disallow?
>>
>> No.
>>
>> I don't think it is a good idea to have an option to disable TRACE at
>> the connector level. I'd be quite happy to remove that feature but I'm
>> fairly sure I would not be able to get consensus to do that.
>>
>> My understanding is that TRACE got its poor reputation due to a
>> misbehaving browser. Rather than pressure the browser vendor to fix
>> their broken browser, the security community decided to pressure the
>> server community to disable the functionality the browser didn't handle
>> properly. That just seems backwards to me no matter how big the
>> browser's market share might have been at the time and how reluctant to
>> change the vendor was.
>>
>> CONNECT returns 405 by default in a Servlet container and none of TRACE,
>> OPTIONS or HEAD are inherently unsafe.
>>
>> Mark
>>
>>
>> >
>> > Thanks,
>> >
>> > Bhavesh
>> >
>> > On Fri, Oct 7, 2022 at 10:59 AM Mark Thomas <ma...@apache.org> wrote:
>> >
>> >> On 07/10/2022 18:09, Bhavesh Mistry wrote:
>> >>> Hi Tomcat Team,
>> >>>
>> >>> We have a unique situation.  We wanted to block ALL *OPTIONALS* HTTP
>> >> method
>> >>> on port 80 and 443.
>> >>>
>> >>> We have connector definitions as follows:
>> >>>
>> >>>
>> >>>       <Connector executor="tomcatThreadPool"
>> >>>                  port="8080" protocol="HTTP/1.1"
>> >>>                  connectionTimeout="20000"
>> >>>                  redirectPort="8443" />
>> >>>       -->
>> >>>       -->
>> >>>       <Connector port="${tomcat.secure.port}"
>> >>> protocol="org.apache.coyote.http11.Http11NioProtocol"
>> >>>                  relaxedPathChars="[\\]^`{|}"
>> >> relaxedQueryChars="[\\]^`{|}"
>> >>>                  address="${tomcat.address}" minSpareThreads="100"
>> >>>    maxThreads="200" SSLEnabled="true"
>> >>>                  scheme="https" secure="true" maxSwallowSize="-1"
>> >>> maxPostSize="-1">
>> >>>           <UpgradeProtocol
>> >> className="org.apache.coyote.http2.Http2Protocol"
>> >>> readTimeout="50000" streamReadTimeout ="-1" streamWriteTimeout="-1"
>> >>>           overheadContinuationThreshold="0" overheadDataThreshold="0"
>> >>> overheadWindowUpdateThreshold="0"/>
>> >>>
>> >>>       </Connector>
>> >>>
>> >>> and we have an application filter to block and return 405.  This works
>> >> for
>> >>> HTTPS port 443.  But request going to HTTP port 80 always get
>> redirected
>> >>> regardless of the method.
>> >>>
>> >>> curl -i -k -X OPTIONS http://10.43.243.8/versa/
>> >>> *HTTP/1.1 302*
>> >>> Cache-Control: private
>> >>> Location: https://10.43.243.8/versa/
>> >>> Content-Length: 0
>> >>> Date: Fri, 07 Oct 2022 16:58:27 GMT
>> >>> Server: Versa Director
>> >>>
>> >>> curl -i -k -X OPTIONS https://10.43.243.8/versa/
>> >>> *HTTP/2 405*
>> >>> cache-control: private
>> >>> content-length: 0
>> >>> date: Fri, 07 Oct 2022 16:58:51 GMT
>> >>>
>> >>> We wanted to block OPTIONS on port 80 as well, it seems to me that
>> tomcat
>> >>> internally  (via connector) redirects requests without application
>> code.
>> >>> How can I achieve blocking OPTIONS, TRACE, and CONNECT  HTTP methods
>> on
>> >>> port 80 while redirect is ON for the connector?
>> >>>
>> >>> Any pointers or help is greatly appreciated.
>> >>
>> >> Tomcat only redirects http to https as the result of an application
>> >> defined transport-guarantee element in web.xml.
>> >>
>> >> Security constraints get processed before Filters.
>> >>
>> >> You can't change the either of the above.
>> >>
>> >> What you could do, is remove the transport-guarantee from web.xml and
>> >> perform the http to https redirect in your Filter. Then you'd have the
>> >> option to return 405 instead of the redirect.
>> >>
>> >> Mark
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> >> For additional commands, e-mail: users-h...@tomcat.apache.org
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>>

Reply via email to