是否有可能确保包含弹簧安全的jsp?

时间:2010-10-05 21:09:46

标签: java jsp configuration include spring-security

我有一个导入jsp文件的jsp。是否可以使用弹簧安全配置来保护导入?

例如,我想使用这行代码:

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

但是,如果用户未以管理员身份登录,则由于安全原因导致该导入不起作用。我使用此行

保护了admin文件夹
<intercept-url pattern="/jsp/admin/**" access="hasRole('ROLE_ADMIN')" />

但是当在jsp文件中导入add_user jsp时,如果用户以没有admin角色的用户身份登录,则无需管理员权限。如果没有必要,我宁愿不在导入周围使用标签。

3 个答案:

答案 0 :(得分:4)

Spring Security使用Servlet过滤器来确保用户访问的资源的安全机制。

导入JSP时,Servlet过滤器无法拦截调用,因为资源是在内部加载的,而不通过Servlet连接。

一种可能的解决方案是在jsp页面中添加逻辑,如果用户没有必要的凭据,则会阻止导入安全资源。

我不是JSP专家,但我不知道如何在不添加导入标记的情况下添加必要的逻辑。

答案 1 :(得分:1)

您可以通过强制请求移出容器来实现此目的。例如

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

但我不会真的推荐这个。一个原因是,在许多容器中,如果从导入的URL返回403,它将传播到父页面并为整个页面返回403。

因此,将导入包装在一些弹簧安全标签中可能是更好的方法。

虽然我也考虑过只有两个独立的jsp - 一个用于管理员用户,一个用于非管理员用户。如果将页面分解为组件,则几乎不需要重复内容。

答案 2 :(得分:1)

<%@ 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>