|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
Intercept filter methodI am new to aspectj and enounter a problem when trying to apply aspectj to the web environment. My problem is that I need to use TapestryFilter and want to add some more behaviour whilst tomcat execute doFilter method. However, I notice that TapestryFilter.doFilter is marked as final so there is no way to extend/ subclass it. Therefore, I try to use around() advice to bypass the method as the suggestion in http://www.nabble.com/How-to-delete-a-method-td22550934.html
void around() : execution(* MyClass.finalize()) { ... no proceed() here } So I create a class where it contains the following code: pointcut interceptor(ServletRequest request, ServletResponse response, FilterChain filterChain) : execution(* org.apache.tapestry5.TapestryFilter.doFilter(ServletRequest, ServletResponse, FilterChain) throws IOException, ServletException) && args(request, response, filterChain); void around(ServletRequest request, ServletResponse response, FilterChain filterChain) : interceptor(request, response, filterChain) { System.out.println("============> TapestryFilterInterceptor.aj test aspectj ..."); // proceed(); } What I expect is when filter gets called in the web environment (client accesses the url from browser), the log should print information e.g. TapestryFilterInterceptor.java test aspectj ... Unfortunately, it seems the log doesn't show anything related to this message. So my question is - is this the right way to use advice if I want to add more code in the doFilter() method using aspectj? Or what is the right way to do such task? Thanks in advice. I appreciate any suggestion. |
|
|
RE: Intercept filter methodI don't know Tapestry, and perhaps your pointcut doesn't map exactly the doFilter method which is executed. Try with a more generic pointcut like : pointcut interceptor : execution(* org.apache.tapestry5.TapestryFilter.doFilter(..) ); void around() : interceptor { System.out.println("============> TapestryFilterInterceptor.aj test aspectj ..."); // eventually getArgs and handle them // proceed(); } Jean-Louis Pasturel -----Message d'origine----- De : aspectj-users-bounces@... [mailto:aspectj-users-bounces@...] De la part de neo anderson Envoyé : jeudi 3 septembre 2009 04:16 À : aspectj-users@... Objet : [aspectj-users] Intercept filter method I am new to aspectj and enounter a problem when trying to apply aspectj to the web environment. My problem is that I need to use TapestryFilter and want to add some more behaviour whilst tomcat execute doFilter method. However, I notice that TapestryFilter.doFilter is marked as final so there is no way to extend/ subclass it. Therefore, I try to use around() advice to bypass the method as the suggestion in http://www.nabble.com/How-to-delete-a-method-td22550934.html void around() : execution(* MyClass.finalize()) { ... no proceed() here } So I create a class where it contains the following code: pointcut interceptor(ServletRequest request, ServletResponse response, FilterChain filterChain) : execution(* org.apache.tapestry5.TapestryFilter.doFilter(ServletRequest, ServletResponse, FilterChain) throws IOException, ServletException) && args(request, response, filterChain); void around(ServletRequest request, ServletResponse response, FilterChain filterChain) : interceptor(request, response, filterChain) { System.out.println("============> TapestryFilterInterceptor.aj test aspectj ..."); // proceed(); } What I expect is when filter gets called in the web environment (client accesses the url from browser), the log should print information e.g. TapestryFilterInterceptor.java test aspectj ... Unfortunately, it seems the log doesn't show anything related to this message. So my question is - is this the right way to use advice if I want to add more code in the doFilter() method using aspectj? Or what is the right way to do such task? Thanks in advice. I appreciate any suggestion. -- View this message in context: http://www.nabble.com/Intercept-filter-method-tp25268794p25268794.html Sent from the AspectJ - users mailing list archive at Nabble.com. _______________________________________________ aspectj-users mailing list aspectj-users@... https://dev.eclipse.org/mailman/listinfo/aspectj-users ********************************* This message and any attachments (the "message") are confidential and intended solely for the addressees. Any unauthorised use or dissemination is prohibited. Messages are susceptible to alteration. France Telecom Group shall not be liable for the message if altered, changed or falsified. If you are not the intended addressee of this message, please cancel it immediately and inform the sender. ******************************** _______________________________________________ aspectj-users mailing list aspectj-users@... https://dev.eclipse.org/mailman/listinfo/aspectj-users |
|
|
RE: Intercept filter methodThanks for reply. I copy TapestryFilger.java to my own folder and rename it (e.g. MyTapestryFiler.java) to use it in the web.xml as customized filter. It works fine. The pointcut interceptor() can capture the execution of doFilter() method. However, it just won't work if switch back using TapestryFilter. This arises me a question. Is it possible in the bytecode level to add some contract preventing bytecode to be altered by other process?
As I understand that aspectj would alter and weave added code at bytecode level. So I am just curious if api e.g. javaassist would provide such kind of method to prevent aspectj to work? Thank you again for the help.
|
|
|
RE: Intercept filter methodIf the code is woven twice by 2 different tools ( AspectJ and Javassist), I think it is difficult to handle a priority. With AspectJ, you can handle priorities between advices when many aspects are woven with a pointcut ( pointcut call or execution for example). Jean-Louis Pasturel -----Message d'origine----- De : aspectj-users-bounces@... [mailto:aspectj-users-bounces@...] De la part de neo anderson Envoyé : jeudi 3 septembre 2009 19:36 À : aspectj-users@... Objet : RE: [aspectj-users] Intercept filter method Thanks for reply. I copy TapestryFilger.java to my own folder and rename it (e.g. MyTapestryFiler.java) to use it in the web.xml as customized filter. It works fine. The pointcut interceptor() can capture the execution of doFilter() method. However, it just won't work if switch back using TapestryFilter. This arises me a question. Is it possible in the bytecode level to add some contract preventing bytecode to be altered by other process? As I understand that aspectj would alter and weave added code at bytecode level. So I am just curious if api e.g. javaassist would provide such kind of method to prevent aspectj to work? Thank you again for the help. jeanlouis.pasturel-2 wrote: > > > I don't know Tapestry, and perhaps your pointcut doesn't map exactly the > doFilter method which is executed. > Try with a more generic pointcut like : > > > pointcut interceptor : execution(* > org.apache.tapestry5.TapestryFilter.doFilter(..) ); > > void around() : interceptor { > > System.out.println("============> TapestryFilterInterceptor.aj test > aspectj > ..."); > // eventually getArgs and handle them > // proceed(); > } > > > Jean-Louis Pasturel > > > -----Message d'origine----- > De : aspectj-users-bounces@... > [mailto:aspectj-users-bounces@...] De la part de neo anderson > Envoyé : jeudi 3 septembre 2009 04:16 > À : aspectj-users@... > Objet : [aspectj-users] Intercept filter method > > > I am new to aspectj and enounter a problem when trying to apply aspectj to > the web environment. My problem is that I need to use TapestryFilter and > want to add some more behaviour whilst tomcat execute doFilter method. > However, I notice that TapestryFilter.doFilter is marked as final so there > is no way to extend/ subclass it. Therefore, I try to use around() advice > to bypass the method as the suggestion in > http://www.nabble.com/How-to-delete-a-method-td22550934.html > > void around() : execution(* MyClass.finalize()) { > ... no proceed() here > } > > So I create a class where it contains the following code: > > pointcut interceptor(ServletRequest request, ServletResponse > response, > FilterChain filterChain) : execution(* > org.apache.tapestry5.TapestryFilter.doFilter(ServletRequest, > ServletResponse, FilterChain) throws IOException, ServletException) && > args(request, response, filterChain); > > void around(ServletRequest request, ServletResponse response, > FilterChain > filterChain) : interceptor(request, response, filterChain) { > > System.out.println("============> TapestryFilterInterceptor.aj test > aspectj > ..."); > // proceed(); > } > > > What I expect is when filter gets called in the web environment (client > accesses the url from browser), the log should print information e.g. > TapestryFilterInterceptor.java test aspectj ... > > Unfortunately, it seems the log doesn't show anything related to this > message. > > So my question is - is this the right way to use advice if I want to add > more code in the doFilter() method using aspectj? Or what is the right way > to do such task? > > Thanks in advice. > > I appreciate any suggestion. > > > > > -- > View this message in context: > http://www.nabble.com/Intercept-filter-method-tp25268794p25268794.html > Sent from the AspectJ - users mailing list archive at Nabble.com. > > _______________________________________________ > aspectj-users mailing list > aspectj-users@... > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > > ********************************* > This message and any attachments (the "message") are confidential and > intended solely for the addressees. > Any unauthorised use or dissemination is prohibited. > Messages are susceptible to alteration. > France Telecom Group shall not be liable for the message if altered, > changed or falsified. > If you are not the intended addressee of this message, please cancel it > immediately and inform the sender. > ******************************** > _______________________________________________ > aspectj-users mailing list > aspectj-users@... > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > -- View this message in context: http://www.nabble.com/Intercept-filter-method-tp25268794p25280797.html Sent from the AspectJ - users mailing list archive at Nabble.com. _______________________________________________ aspectj-users mailing list aspectj-users@... https://dev.eclipse.org/mailman/listinfo/aspectj-users ********************************* This message and any attachments (the "message") are confidential and intended solely for the addressees. Any unauthorised use or dissemination is prohibited. Messages are susceptible to alteration. France Telecom Group shall not be liable for the message if altered, changed or falsified. If you are not the intended addressee of this message, please cancel it immediately and inform the sender. ******************************** _______________________________________________ aspectj-users mailing list aspectj-users@... https://dev.eclipse.org/mailman/listinfo/aspectj-users |
| Free embeddable forum powered by Nabble | Forum Help |