Like I said--in my mind it depends on how much of your application
requires this logic. If it covers a lot of the app, I think an
interceptor makes sense. If it's only tiny little bits, I'd inject a
utility class and call it directly.

Dave

On Wed, Oct 27, 2010 at 6:22 AM, Jose Luis Martinez Avial
<jlmarti...@pb-santander.com> wrote:
> Gello Dave,
>        There is nothing wrong with the ideas you gave me. I particulary like 
> Li's idea. What I'm saying is that to get the IP address is a different 
> story, since there maybe some logic involved that depends on the context. I'm 
> thinking which is the most orthodox and clean way to do it. and if a 
> RemoteAddressInterceptor would make sense. For example, while I think a 
> RequestHeaderIntereceptor could (and I think it should) be added to the 
> Struts2 stack, I'm not so sure about a RemoteAddressIntecerptor, that's why I 
> ask for any ideas about the best way to implement it.
>
>        Jose
>
> -----Original Message-----
> From: Dave Newton [mailto:davelnew...@gmail.com]
> Sent: Wednesday, October 27, 2010 3:39 AM
> To: Struts Users Mailing List
> Subject: Re: RequestHeaderAware in Struts 2?
>
> What's wrong with the ideas you've been given? Ying's is exactly what you 
> asked for, Chris's might be more suitable if you want to set one or two 
> action properties based on one or two header values.
>
> Another thing to consider is how the values will actually be used: the 
> application-specific "context" of the header values. What expresses your 
> intent most clearly? An action that implements "RequestHeaderAware", or an 
> action that is "RemoteIPAddrAware" (or whatever)?
>
> Dave
>
> On Tuesday, October 26, 2010, Jose Luis Martinez Avial 
> <jlmarti...@pb-santander.com> wrote:
>> Well, that's an option. Another thing I would need to get is the Remote 
>> Address. That can be complicated, since sometimes -specially when you are 
>> behind a proxy, or something like that- the IP address you get is not 
>> correct. In those cases with a proxy usually the IP is in a header in the 
>> request(For example, if you are using Apache, you will get a 
>> "x-forwarded-for" header in the request). I was thinking about doing an 
>> interceptor that can be setup to look for that header(Or one similar, that 
>> can be setup in the struts xml) and if it's not present, set the IP into the 
>> action. What do you think?
>>
>> Jose
>>
>> -----Original Message-----
>> From: Li Ying [mailto:liying.cn.2...@gmail.com]
>> Sent: Tuesday, October 26, 2010 3:32 AM
>> To: Struts Users Mailing List
>> Subject: Re: RequestHeaderAware in Struts 2?
>>
>> What Chris has said is right.
>>
>> But what Jose Luis asked for is a inject mechanism likes ParameterAware 
>> which takes all the request params through one Map, but not through several 
>> property.
>>
>> So I think the simpler (also more Quick And Dirty) way is:
>>
>> (1)Create a interface, likes:
>> public interface HeaderAware {
>>         /**
>>          * Sets the map of request headers in the implementing class.
>>          *
>>          * @param headers
>>          *            a Map of headers (name/value Strings).
>>          */
>>         public void setHeaders(final Map<String, String[]> headers); }
>>
>> (2)implement this interface in your action class (or the common super
>> class of all of your actions)
>>
>> (3)create a interceptor, which inject the headers map to your action class 
>> likes what ServletConfigInterceptor is doing, the code will likes:
>>
>> public class RequestHeaderInterceptor extends AbstractInterceptor {
>>        �...@override
>>         public String intercept(final ActionInvocation invocation)
>> throws Exception {
>>                 final Object action = invocation.getAction();
>>
>>                 if (action instanceof HeaderAware) {
>>                         Map<String, String[]> requestHeaders =
>>
>> this.getRequestHeaders(ServletActionContext.getRequest());
>>                         ((HeaderAware)
>> action).setHeaders(requestHeaders);
>>                 }
>>
>>                 return invocation.invoke();
>>         }
>>
>>         private Map<String, String[]> getRequestHeaders(
>>                         final HttpServletRequest request) {
>>                 Map<String, String[]> headers = new HashMap<String,
>> String[]>();
>>
>>                 // TODO: retrieve all the request headers by
>>                 // HttpServletRequest.getHeaderNames(),
>> HttpServletRequest.getHeaders()
>>                 // and put them into Map
>>
>>                 return headers;
>>         }
>> }
>>
>> (4)add RequestHeaderInterceptor into your interceptor-stack
>>
>>
>>
>> 2010/10/26 Chris Pratt <thechrispr...@gmail.com>:
>>> As far as I'm aware, there's not.  But it wouldn't be hard to write one.
>>> You could use the ParameterInterceptor as a pattern, but have it take
>>> it's data from the headers rather than the parameters and you'd be
>>> done in 1/2 hr.  You could get fancier, to make sure Parameters and
>>> Headers with the same name don't clash, and use an Annotation to
>>> identify which headers to inject into which methods, but that would 
>>> definitely take more than 1/2 hr.
>>> =8^)
>>>  (*Chris*)
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
>
>
> Internet communications are not secure and therefore Banco
> Santander International does not accept legal responsibility for
> the contents of this message. Any views or opinions presented
> are
> solely those of the author and do not necessarily represent those
> of Banco Santander International unless otherwise specifically
> stated.
>
> Las comunicaciones via Internet no son seguras y por lo tanto
> Banco Santander International no asume responsabilidad legal
> ni
> de ningun otro tipo por el contenido de este mensaje. Cualquier
> opinion transmitida pertenece unicamente al autor y no
> necesariamente representa la opinion del Banco Santander
> International a no ser que este expresamente detallado.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to