How to use a servlet filter in Java to change an incoming servlet request url? -


how can use servlet filter change incoming servlet request url from

http://nm-java.appspot.com/check_license/dir_my_app/dir_abc/my_obj_123

to

http://nm-java.appspot.com/check_license?contact_id=my_obj_123

?


update: according balusc's steps below, came following code:

public class urlrewritefilter implements filter {      @override     public void init(filterconfig config) throws servletexception {         //     }      @override     public void dofilter(servletrequest req, servletresponse res, filterchain chain) throws servletexception, ioexception {         httpservletrequest request = (httpservletrequest) req;         string requesturi = request.getrequesturi();          if (requesturi.startswith("/check_license/dir_my_app/")) {             string toreplace = requesturi.substring(requesturi.indexof("/dir_my_app"), requesturi.lastindexof("/") + 1);             string newuri = requesturi.replace(toreplace, "?contact_id=");             req.getrequestdispatcher(newuri).forward(req, res);         } else {             chain.dofilter(req, res);         }     }      @override     public void destroy() {         //     } } 

the relevant entry in web.xml this:

<filter>     <filter-name>urlrewritefilter</filter-name>     <filter-class>com.example.urlrewritefilter</filter-class> </filter> <filter-mapping>     <filter-name>urlrewritefilter</filter-name>     <url-pattern>/*</url-pattern> </filter-mapping> 

i tried both server-side , client-side redirect expected results. worked, balusc!

  1. implement javax.servlet.filter.
  2. in dofilter() method, cast incoming servletrequest httpservletrequest.
  3. use httpservletrequest#getrequesturi() grab path.
  4. use straightforward java.lang.string methods substring(), split(), concat() , on extract part of interest , compose new path.
  5. use either servletrequest#getrequestdispatcher() , requestdispatcher#forward() forward request/response new url (server-side redirect, not reflected in browser address bar), or cast incoming servletresponse httpservletresponse , httpservletresponse#sendredirect() redirect response new url (client side redirect, reflected in browser address bar).
  6. register filter in web.xml on url-pattern of /* or /check_license/*, depending on context path, or if you're on servlet 3.0 already, use @webfilter annotation instead.

don't forget add check in code if url needs changed , if not, call filterchain#dofilter(), else call in infinite loop.

alternatively can use existing 3rd party api work you, such tuckey's urlrewritefilter can configured way apache's mod_rewrite.


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -