<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?
谢谢!
答案 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>