added ajax aware PassThruAuthenticationFilter to support redirect to login page when ajax request is made while session is timed out

This commit is contained in:
jomu
2017-05-07 14:44:34 +00:00
parent 613b047aa9
commit 88d7fe2b7b
2 changed files with 39 additions and 0 deletions

View File

@ -36,6 +36,10 @@
<version>${elapi.version}</version> <version>${elapi.version}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -0,0 +1,35 @@
package de.muehlencord.shirofaces.filter;
import java.io.IOException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter;
/**
* found at http://balusc.omnifaces.org/2013/01/apache-shiro-is-it-ready-for-java-ee-6.html#MakeShiroJSFAjaxAware)
* source by BalusC, adjusted to PassThruAuthenticationFilter by Joern Muehlencord
* @author BalusC
* @author Joern Muehlencord <joern at muehlencord.de>
*/
public class FacesAjaxAwarePassThruAuthenticationFilter extends PassThruAuthenticationFilter {
private static final String FACES_REDIRECT_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<partial-response><redirect url=\"%s\"></redirect></partial-response>";
@Override
protected void redirectToLogin(ServletRequest req, ServletResponse res) throws IOException {
HttpServletRequest request = (HttpServletRequest) req;
if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {
res.setContentType("text/xml");
res.setCharacterEncoding("UTF-8");
res.getWriter().printf(FACES_REDIRECT_XML, request.getContextPath() + getLoginUrl());
}
else {
super.redirectToLogin(req, res);
}
}
}