【问题标题】:How to show JSP content based on user's access to URLs with Spring Security如何使用 Spring Security 根据用户对 URL 的访问来显示 JSP 内容
【发布时间】:2011-08-30 08:10:59
【问题描述】:

如果你想根据用户对一个或多个 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>

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

【问题讨论】:

    标签: java spring jsp spring-security


    【解决方案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 标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-11
      • 2011-04-21
      • 1970-01-01
      • 2012-09-18
      • 2012-03-13
      • 2019-02-12
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多