authentication - Redirecting a web client from a servlet-filter (client-server connection via AJAX) -
authentication - Redirecting a web client from a servlet-filter (client-server connection via AJAX) -
i'm doing web jaasrealm authentication (in tomcat 7). filter servlets:
private string loginpage = "welcome.jsp"; @override public void dofilter(servletrequest request, servletresponse response, filterchain filterchain) throws ioexception, servletexception { if ((request instanceof httpservletrequest) && (response instanceof httpservletresponse)) { httpservletrequest httpservletrequest = (httpservletrequest) request; httpservletresponse httpservletresponse = (httpservletresponse) response; if (httpservletrequest.getuserprincipal() == null) { // user not logged in, redirect login page. httpservletrequest.setattribute("from", httpservletrequest.getrequesturi()); httpservletresponse.sendredirect(loginpage); } else { filterchain.dofilter(request, response); } } } and have declared in web.xml
<filter> <filter-name>login-filter</filter-name> <filter-class>loginfilter</filter-class> </filter> <filter-mapping> <filter-name>login-filter</filter-name> <url-pattern>/sampleservlet</url-pattern> </filter-mapping> my problem when i'm not authenticated , phone call servlet via ajax, line of filter doesn't work
httpservletresponse.sendredirect(loginpage); so, haven't receive info , i'm not redirected loggin page. can in case?
here how send re-directs when filtering ajax requests...
ajax code (jquery)
$.ajax({ type: 'post', url: '/signmeinservlet', data: { 'name': name, 'pass': passw, }, datatype: 'json', success: processsigninreturnmethod, error: function (xhr, ajaxoptions, thrownerror){ if (thrownerror.redirect.length) { window.location.replace(thrownerror.redirect); } else { alert('there error processing request, please seek again'); } } }); relevant filter code
// rest of filter processing , logic here, 1 time know want // redirect, utilize below code, works both ajax , regualar // requests httpservletrequest hreq = (httpservletrequest) request; string redirecturl = "/redirected.jsp"; if (hreq.getheader("x-requested-with") != null && hreq.getheader("x-requested-with").equalsignorecase("xmlhttprequest")) { // set response here httpservletresponse hres = (httpservletresponse) response; hres.setcontenttype("text/json; charset=utf-8"); printwriter out = hres.getwriter(); string json = "[{\"redirect\":\"" + redirecturl + "\"}]"; out.write(json); out.flush(); out.close(); } else { ((httpservletresponse)response).sendredirect(redirecturl); } authentication servlets jquery servlet-filters
Comments
Post a Comment