【发布时间】:2014-11-24 18:44:16
【问题描述】:
假设我有一个包含另一个受保护页面的 main.jsp
<%
RequestDispatcher rd = request.getRequestDispatcher("secure/protected.jsp");
rd.include(request, response);
%>
<http auto-config="true" once-per-request="true">
<intercept-url pattern="/secure/**" access="ROLE_SUPERVISOR" />
....
</http>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
目前,我发现的是:
- 实际调用了 Spring 安全过滤器。
- protected.jsp 仍显示在 main.jsp 中。 (但我希望 protected.jsp 会被 spring security 阻止)
我已阅读相关讨论: Spring Security Allows Unauthorized User Access to Restricted URL from a Forward
是否可以保护包含的 jsp?如果不是,为什么? 我猜原因是当我们使用请求调度器时,我们仍然传递原始请求,所以spring安全过滤器只知道原始请求路径(main.jsp),不知道目标包含路径(protectected.jsp)。因此,它不会阻止包含 protectedected.jsp
但它不起作用。 我使用 Spring 安全 3.1.2。
【问题讨论】:
-
once-per-request必须设置为false。 -
@PavelHoral 谢谢。试过了,还是不行。
标签: java jsp spring-security