在不同的浏览器中加载相同的jsp?

时间:2012-09-20 10:29:08

标签: java spring spring-security

<sec:authorize ifAnyGranted="<%=dRoles%>">
    <meta http-equiv="REFRESH" content="0;url=public/First.jsp">
</sec:authorize>

<sec:authorize ifAnyGranted="<%=aRoles%>">      
      <meta http-equiv="REFRESH" content="0;url=public/Second.jsp">
</sec:authorize>

<sec:authorize ifAnyGranted="<%=bRoles%>">  
    <meta http-equiv="REFRESH" content="0;url=public/Third.jsp">
</sec:authorize>

我正在使用春季安全。 登录成功后,加载了Startup.jsp( default-target-url =“/ Startup.jsp )。我的Startup.jsp中有上面的代码。我正在使用spring安全标记。考虑用户可以访问以上所有3个jsps。问题是,在IE7中,加载了First.jsp但在其他浏览器中加载了Third.jsp 。 如何在两个浏览器中显示相同的jsp?

谢谢!

1 个答案:

答案 0 :(得分:0)

我想您处于dRoles中的角色以及bRoles中的角色的情况,因此您的代码会向浏览器发送两个不同的元刷新。

首先,不要使用元刷新,而是使用真正的重定向或转发(并且不应该在JSP中完成,而是在控制器,过滤器或servlet中完成)。

如果您真的想继续使用JSP解决方案,我想这样的事情应该可行:

<c:set var="refreshSent" value="${false}"/>

<sec:authorize ifAnyGranted="<%=dRoles%>">
    <meta http-equiv="REFRESH" content="0;url=public/First.jsp">
    <c:set var="refreshSent" value="${true}"/>
</sec:authorize>

<sec:authorize ifAnyGranted="<%=aRoles%>">
    <c:if test="${!refreshSent}">      
        <meta http-equiv="REFRESH" content="0;url=public/Second.jsp">
        <c:set var="refreshSent" value="${true}"/>
    </c:if>
</sec:authorize>

<sec:authorize ifAnyGranted="<%=bRoles%>">  
    <c:if test="${!refreshSent}">
        <meta http-equiv="REFRESH" content="0;url=public/Third.jsp">
        <c:set var="refreshSent" value="${true}"/>
    </c:if>
</sec:authorize>