1

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

HandlerInterceptor在 Spring 3.2 中使用 a ,所以 myObject handlerHandlerMethod.

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

如果能够将处理程序方法参数也用作 SpEL 变量,那就太好了!例如,可以将 languageId 指定为请求参数并成为处理程序参数@RequestParam

当从方法参数值生成密钥时,我试图查看 Spring 缓存的方法,但我发现这段代码传递了一个来自某个 org.aopalliance 包中的方法的代码Object[] argsinvoke()有没有办法获得Object[] args只使用 Spring AOP?

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;
}
4

0 回答 0