如何根据用户使用Spring Security访问URL来显示JSP内容

时间:2011-05-21 18:58:25

标签: java spring jsp spring-security

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

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

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

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

<sec:authorize url="'/someurl1' and '/someurl2'">
    <!-- show content, if someurl1 and someurl2 are accessible -->
</sec:authorize>

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

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

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

1 个答案:

答案 0 :(得分:1)

我只是将控制器中的逻辑与页面相关联,而不是将其全部填入前端,或者如果您使用的是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);
        }
    }
}

然后在您的前端,如果使用

标签,您可以使用标准JSP
<c:if test="${canUserSeeSection}" ... 

同样的想法也适用于SpringSecurity标签。