Context-relative redirect from within Interceptor?
Hi everyone,
I have the following requirement: if a user access the page three times within the same session, send them back to the home page, and disable further access for this session.
I have implemented this login in an interceptor:
Code:
public class ThreeStrikesAndYrOutInterceptor extends HandlerInterceptorAdapter {
private static final Log logger = LogFactory.getLog(ThreeStrikesAndYrOutInterceptor.class);
private static final String N_STRIKES = "N_STRIKES";
private String redirect;
private int incrementStrikes(HttpServletRequest request) {
Integer strikesAsInteger = (Integer) WebUtils.getSessionAttribute(request, N_STRIKES);
if (strikesAsInteger == null) {
strikesAsInteger = new Integer(0);
} else {
strikesAsInteger = new Integer(strikesAsInteger.intValue() + 1);
}
WebUtils.setSessionAttribute(request, N_STRIKES, strikesAsInteger);
return strikesAsInteger.intValue();
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
int strikes = incrementStrikes(request);
logger.debug("strike count? " + strikes);
if (strikes < 3) {
return true;
}
logger.warn("Detected three accesses in one session - disallowing further requests!");
response.sendRedirect(redirect);
return false;
}
public void setRedirect(String redirect) {
this.redirect = redirect;
}
}
If i set redirect like this:
Code:
<bean name="threeStrikesAndYrOutInterceptor" class="com.equifax.imover.interceptor.ThreeStrikesAndYrOutInterceptor">
<property name="redirect" value="/overview.do" />
</bean>
it redirects me to http://myserver/overview.do which does NOT exist!
How can I tell it to redirect context-sensitive without hardcoding the path??
Thank you!