[ 
https://issues.apache.org/jira/browse/WW-4024?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lukasz Lenart updated WW-4024:
------------------------------

    Description: 
I open this issue as of Lukasz Lenart's comment on this Stack Overflow 
question: http://stackoverflow.com/q/15569532/837154 . I think it would be nice 
to support expressions at "scheme" attribute in "s:url" tag. The situation I 
faced is as follows:

I'm developing a secure web application. This application runs on an 
application server behind a load balancer. The load balancer receives HTTPS 
traffic from the internet but forwards requests to the application server with 
HTTP. Responses are sent back from the application server to the load balancer 
with HTTP and then the load balancer forwards them to the internet with HTTPS. 
The sysadmins disabled the HTTPS support in the application servers because of 
performance reasons, so when we developers need to directly access a particular 
server (e.g. for troubleshooting) we need to use HTTP.

So we have a scenario where the same application, from the point of view of the 
final user, is accessed both by HTTP and HTTPS, but the application itself only 
receives HTTP traffic. Struts2, when rendering a s:url tag, by default chooses 
the scheme used by the request. In this case, always HTTP, which is wrong from 
the point of view of the final users who access the application through the 
load balancer. 

A work-around to this situation would be to support expressions in the scheme 
attribute of s:url, so with the following code:
{code:xml}
<s:url scheme="%{myScheme}" id="myUrl" action="MyAction" includeParams="none">
   <s:param name="someParam" value="blah"/>
</s:url>

<s:a href="%{myUrl}">click me</s:a>
{code}

Struts would render either
{code:xml}
<a href="https://myhost.com/mywebapp/MyAction.action?someParam=blah";>click 
me</a>
{code}
or
{code:xml}
<a href="http://myhost.com/mywebapp/MyAction.action?someParam=blah";>click me</a>
{code}
instead of the current output:
{code:xml}
<a 
href="%{myScheme}://myhost.com/mywebapp/MyAction.action?someParam=blah">click 
me</a>
{code}
In my case, I've overcome this situation by using a custom implementation of 
UrlRenderer, actually a near copy-paste of ServletUrlRenderer, with the only 
change being the line where Struts2 sets the default value for the scheme 
attribute. I've set this default value to my convenience, using a value from 
the Value Stack.

Thanks for taking this into consideration!

  was:
I open this issue as of Lukasz Lenart's comment on this Stack Overflow 
question: http://stackoverflow.com/q/15569532/837154 . I think it would be nice 
to support expressions at "scheme" attribute in "s:url" tag. The situation I 
faced is as follows:

I'm developing a secure web application. This application runs on an 
application server behind a load balancer. The load balancer receives HTTPS 
traffic from the internet but forwards requests to the application server with 
HTTP. Responses are sent back from the application server to the load balancer 
with HTTP and then the load balancer forwards them to the internet with HTTPS. 
The sysadmins disabled the HTTPS support in the application servers because of 
performance reasons, so when we developers need to directly access a particular 
server (e.g. for troubleshooting) we need to use HTTP.

So we have a scenario where the same application, from the point of view of the 
final user, is accessed both by HTTP and HTTPS, but the application itself only 
receives HTTP traffic. Struts2, when rendering a s:url tag, by default chooses 
the scheme used by the request. In this case, always HTTP, which is wrong from 
the point of view of the final users who access the application through the 
load balancer. 

A work-around to this situation would be to support expressions in the scheme 
attribute of s:url, so with the following code:

<s:url scheme="%{myScheme}" id="myUrl" action="MyAction" includeParams="none">
   <s:param name="someParam" value="blah"/>
</s:url>

<s:a href="%{myUrl}">click me</s:a>

Struts would render either

<a href="https://myhost.com/mywebapp/MyAction.action?someParam=blah";>click 
me</a>

or

<a href="http://myhost.com/mywebapp/MyAction.action?someParam=blah";>click me</a>

instead of the current output:

<a 
href="%{myScheme}://myhost.com/mywebapp/MyAction.action?someParam=blah">click 
me</a>

In my case, I've overcome this situation by using a custom implementation of 
UrlRenderer, actually a near copy-paste of ServletUrlRenderer, with the only 
change being the line where Struts2 sets the default value for the scheme 
attribute. I've set this default value to my convenience, using a value from 
the Value Stack.

Thanks for taking this into consideration!

    
> Support expressions for scheme attribute in s:url
> -------------------------------------------------
>
>                 Key: WW-4024
>                 URL: https://issues.apache.org/jira/browse/WW-4024
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Plugin - Tags
>    Affects Versions: 2.3.8
>            Reporter: Octavi Ripolles-Querol
>            Priority: Minor
>             Fix For: 2.3.14
>
>
> I open this issue as of Lukasz Lenart's comment on this Stack Overflow 
> question: http://stackoverflow.com/q/15569532/837154 . I think it would be 
> nice to support expressions at "scheme" attribute in "s:url" tag. The 
> situation I faced is as follows:
> I'm developing a secure web application. This application runs on an 
> application server behind a load balancer. The load balancer receives HTTPS 
> traffic from the internet but forwards requests to the application server 
> with HTTP. Responses are sent back from the application server to the load 
> balancer with HTTP and then the load balancer forwards them to the internet 
> with HTTPS. The sysadmins disabled the HTTPS support in the application 
> servers because of performance reasons, so when we developers need to 
> directly access a particular server (e.g. for troubleshooting) we need to use 
> HTTP.
> So we have a scenario where the same application, from the point of view of 
> the final user, is accessed both by HTTP and HTTPS, but the application 
> itself only receives HTTP traffic. Struts2, when rendering a s:url tag, by 
> default chooses the scheme used by the request. In this case, always HTTP, 
> which is wrong from the point of view of the final users who access the 
> application through the load balancer. 
> A work-around to this situation would be to support expressions in the scheme 
> attribute of s:url, so with the following code:
> {code:xml}
> <s:url scheme="%{myScheme}" id="myUrl" action="MyAction" includeParams="none">
>    <s:param name="someParam" value="blah"/>
> </s:url>
> <s:a href="%{myUrl}">click me</s:a>
> {code}
> Struts would render either
> {code:xml}
> <a href="https://myhost.com/mywebapp/MyAction.action?someParam=blah";>click 
> me</a>
> {code}
> or
> {code:xml}
> <a href="http://myhost.com/mywebapp/MyAction.action?someParam=blah";>click 
> me</a>
> {code}
> instead of the current output:
> {code:xml}
> <a 
> href="%{myScheme}://myhost.com/mywebapp/MyAction.action?someParam=blah">click 
> me</a>
> {code}
> In my case, I've overcome this situation by using a custom implementation of 
> UrlRenderer, actually a near copy-paste of ServletUrlRenderer, with the only 
> change being the line where Struts2 sets the default value for the scheme 
> attribute. I've set this default value to my convenience, using a value from 
> the Value Stack.
> Thanks for taking this into consideration!

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to