Java 如何基于用户显示JSP内容';s使用Spring安全性访问URL

Java 如何基于用户显示JSP内容';s使用Spring安全性访问URL,java,spring,jsp,spring-security,Java,Spring,Jsp,Spring Security,如果您希望根据用户对一个或多个URL的访问权限在JSP页面中显示内容,则可以根据用户对一个URL的访问权限轻松完成: <sec:authorize url="/someurl"> <!-- show content, if someurl is accessible --> </sec:authorize> 但是,有时基于用户可访问URL上的布尔表达式显示内容可能会很方便,例如(不正确): 或 到目前为止,我已经提出了一个肮脏的解决方案,

如果您希望根据用户对一个或多个URL的访问权限在JSP页面中显示内容,则可以根据用户对一个URL的访问权限轻松完成:

<sec:authorize url="/someurl">
    <!-- show content, if someurl is accessible -->
</sec:authorize>

但是,有时基于用户可访问URL上的布尔表达式显示内容可能会很方便,例如(不正确):



到目前为止,我已经提出了一个肮脏的解决方案,在自定义类中使用Spring EL构造和静态方法:

<sec:authorize access="!T(my.package.MyClass).isAccessibleToUser('/someurl')">
    <!-- show content, if someurl is inaccessible -->
</sec:authorize>


有没有更优雅的方法来实现这一点?

我会将该逻辑放在与页面关联的控制器中,而不是将其全部塞进前端,或者如果您使用的是Spring MVC,更好的解决方案是创建RequestInterceptor类

public class RequestInterceptor extends HandlerInterceptorAdapter {
    @Override
        public void postHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler,
            ModelAndView modelAndView) throws Exception {

            // logic here that checks if the user can see something
            modelAndView.addObject("canUserSeeSection", abooleanvalue);

            super.postHandle(request, response, handler, modelAndView);
        }
    }
}
然后,在前端,如果使用

<c:if test="${canUserSeeSection}" ... 

public class RequestInterceptor extends HandlerInterceptorAdapter {
    @Override
        public void postHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler,
            ModelAndView modelAndView) throws Exception {

            // logic here that checks if the user can see something
            modelAndView.addObject("canUserSeeSection", abooleanvalue);

            super.postHandle(request, response, handler, modelAndView);
        }
    }
}
<c:if test="${canUserSeeSection}" ...