如果您希望根据用户对一个或多个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>
有没有更优雅的方法来实现这一目标?
答案 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标签。