BookMark重定向使用AOP-Spring拦截器

时间:2012-05-03 07:36:56

标签: spring-mvc aop interceptor

我试图使用spring AOP编写拦截器。拦截器将查找请求URL是否为书签,如果是,将重定向到身份验证页面。 代码段:

public Object invoke(MethodInvocation invocation)抛出Throwable {         logger.entering(this.getClass()。getSimpleName(),“invoke”,invocation);

    Object result = null;
    try {
        // Logic to exclude the beans as per the list in the configuration.
        boolean excluded = false;
        for (String excludebean : excludedBeans) {
            if (excludebean != null && excludebean.equalsIgnoreCase(invocation.getThis().getClass().getSimpleName())) {
                excluded = true;
                break;
            }
        }

        // If the Target Method is "toString", then set EXCLUDE to TRUE and process the request
        if(excluded == false && invocation.getMethod().getName().equalsIgnoreCase("toString"))
        {
            excluded = true;
        }

        // if user session object is available, then process the request or
        // else forward to the configured view.
        if (excluded || getSessionHolder().getUserVO() != null) {
            result = invocation.proceed();
        }
        else {
            logger.logp(Level.INFO, this.getClass().getSimpleName(),
                    "invoke(MethodInvocation)", "User Object is "+ getSessionHolder().getUserVO()
                            + ". So redirecting user to home page");
            result = new ModelAndView("redirect:/security/authenticate.do");

        }
    }
    catch (Throwable ex) {
        throw ex;
    }
    logger.exiting(this.getClass().getSimpleName(), "invoke");
    return result;
}

当我调试控件时,如预期的那样进入else块,但是在我返回结果之后,控件转到了书签的URl ratehr的handle方法,而不是重定向视图的处理程序。

请帮助我...提前谢谢。

1 个答案:

答案 0 :(得分:1)

为什么你需要AOP作为拦截器。您可以使用Regular拦截器轻松重定向。

public class RedirectInterceptor extends HandlerInterceptorAdapter{

    private String redirectMapping;

    public void setRedirectMapping(String redirectMapping) {
        this.redirectMapping = **maintenanceMapping**;
    }


    //before the actual handler will be executed
    public boolean preHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler)
        throws Exception {
                        if (somethingHappened){
            response.sendRedirect(redirectMapping);
            return false;
                        } else
                          return true;

    }
}