Как показать содержимое JSP на основе доступа пользователя к URL-адресам с помощью Spring Security - PullRequest
2 голосов
/ 21 мая 2011

Если вы хотите отображать контент на странице JSP на основе доступа пользователя к одному или нескольким URL-адресам, это легко сделать, основываясь на доступе пользователя к одному 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 Ответ

1 голос
/ 21 мая 2011

Я бы просто поместил эту логику в контроллер, связанный со страницей, а не втиснул все это во внешний интерфейс, или, если вы используете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...