Можно ли защитить включенный JSP с Spring-Security? - PullRequest
0 голосов
/ 06 октября 2010

Я получил jsp, который импортирует файл jsp. Можно ли защитить импорт с помощью конфигурации Spring-Security?

Например, я хочу использовать эту строку кода:

<c:import url="jsp/admin/add_user.jsp" />

Но если пользователь не вошел в систему как администратор, этот импорт не должен работать из-за соображений безопасности. Я защитил папку администратора этой строкой

<intercept-url pattern="/jsp/admin/**" access="hasRole('ROLE_ADMIN')" />

Но при импорте jsp add_user в файл jsp, где не требуются права администратора, он все равно работает, если пользователь вошел в систему как пользователь без роли администратора. Я предпочитаю не использовать теги при импорте, если в этом нет необходимости.

Ответы [ 3 ]

4 голосов
/ 08 октября 2010

Spring Security использует Servlet Filter для обеспечения безопасных механизмов ресурсов, к которым обращается пользователь.

При импорте JSP Servlet Filter не может перехватить вызов, потому что ресурс загружается изнутри, не проходя черезСоединение с сервлетом.

Возможное решение состоит в добавлении логики внутри страницы jsp, которая предотвращает импорт защищенного ресурса, если у пользователя нет необходимых учетных данных.

Я не эксперт JSP, но я не вижу, как вы можете добавить необходимую логику без добавления тега вокруг импорта.

1 голос
/ 06 апреля 2011
<%@ taglib prefix="authz"
    uri="http://www.springframework.org/security/tags"%>

----

    <authz:authorize access="hasRole('campaign_read')">   
        Manager login --- <%@include file="manager/create_viewer.jsp"%>
    </authz:authorize>
1 голос
/ 13 октября 2010

Этого можно добиться, заставив запрос выйти за пределы контейнера.например,

<c:import url="http://localhost/jsp/admin/add_user.jsp" />

Однако я бы не стал этого рекомендовать.Одна из причин заключается в том, что во многих контейнерах, если 403 возвращается из импортированного URL-адреса, он будет распространяться на родительскую страницу и возвращать 403 для всей страницы.лучший способ пойти.

Хотя я бы также подумал о том, чтобы просто иметь два отдельных jsp - один для пользователей с правами администратора и один для пользователей без прав администратора.Если вы разбиваете страницу на компоненты, дублирование контента практически не требуется.

...