在Spring HandlerInterceptor中,如何访问方法的参数/参数?

时间:2013-11-12 08:59:50

标签: java spring spring-mvc spring-aop spring-el

我打算为Spring MVC控制器方法编写自己的@RoleRestricted注释,以便像Spring Security那样。我想稍后集成到Spring Security,但是现在,我必须拥有自己的解决方案。另外,这也是一个学习问题。

我在Spring 3.2中使用HandlerInterceptor,因此我的Object handlerHandlerMethod的实例。

现在,我想要实现的是能够在一些注释的参数中使用SpEL表达式,这通常很有效,使用hm.getBean()作为根bean用于SpEL评估上下文。

能够将处理程序方法参数用作SpEL变量也是最棒的!例如。可以将languageId指定为请求参数,并使用@RequestParam成为处理程序参数。

我试着看一下Spring缓存的方法,当从方法参数值生成密钥时,但我发现这些代码传递Object[] args,来自invoke()方法一些org.aopalliance包。有没有办法只使用Spring AOP来获取Object[] args

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
    if (handler instanceof HandlerMethod)
    {
        HandlerMethod hm = (HandlerMethod) handler;

        RoleRestricted annotation = hm.getMethodAnnotation(RoleRestricted.class);

        if (annotation != null)
        {
            // Handler method was annotated with an @RoleRestricted annotation.
            HttpSession session = request.getSession();

            RoleResource resource = annotation.resource();
            EvaluationContext context = ???

            if (SessionUtils.hasRoleLanguageAccess(annotation.resource(), session, annotation.corporateId(), annotation.languageId()))
            {
                return true;
            }
            else
            {
                logger.debug("Declined access");
                response.sendRedirect(response.encodeRedirectURL("/RoleLogin.do?onSuccess=" + URLEncoder.encode(onSuccess, "UTF-8")));
            }
        }
    }
    return true;
}

0 个答案:

没有答案