Java 如何基于用户显示JSP内容';s使用Spring安全性访问URL
如果您希望根据用户对一个或多个URL的访问权限在JSP页面中显示内容,则可以根据用户对一个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上的布尔表达式显示内容可能会很方便,例如(不正确): 或 到目前为止,我已经提出了一个肮脏的解决方案,
<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}" ...