2010-10-05 71 views
0

我得到了一个jsp,它导入了一个jsp文件。使用弹簧安全配置可以保护导入吗?是否有可能通过spring-security来保护包含的jsp?

比如我想使用此行代码:

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

但是如果用户没有登录的管理员不是因为安全的原因,这应该导入无法工作。我担保的管理文件夹这一行

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

但是,当进口在没有管理员权限的需要,如果用户的登录身份没有管理员角色的用户比它仍然有效JSP文件中ADD_USER JSP。如果没有必要,我不希望在导入时使用标签。

回答

4

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

当你输入一个JSP,因为资源没有通过直通一个Servlet连接内部装载的Servlet过滤器无法拦截的电话。

一个可能的解决方案是添加阻止进口安全资源的,如果用户没有生活必需品的凭据的JSP页面中的逻辑。

我不是一个JSP的专家,但我不明白你怎么可以添加必要的逻辑,而周围的进口添加标签。

1

您可以通过强制将请求强制到容器外部来实现此目的。例如

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

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

所以包装在一些春天的安全标签的进口可能是一个更好的路要走。

虽然我还认为仅仅拥有两个独立的JSP - 一个用于管理用户和一个非管理员用户。如果将页面分解为组件,则几乎不需要重复内容。

+0

由于这个工程。我确实希望整个页面出现403错误,因为这不应该发生在正常站点导航上。不幸的是,我没有得到一个403,而是在我当前页面中嵌套的登录表单。 – 2010-10-13 13:32:47

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> 
+0

使用上述弹簧安全标签库。 – Divang 2011-04-06 09:20:23

+1

mondev,你可以编辑你自己的答案。另外,请确保代码使用四个空格的缩进进行正确标记。 – 2011-04-06 10:09:05

相关问题