A用户对A菜单有权限访问。
B用户对A菜单无权限访问。
A用户登陆系统后,直接输入A菜单的url,可以访问。
此时,A用户退出。
B用户登陆系统后, 直接输入A菜单的url,不可以访问。
跳转到登陆页面。
此时,A用户登陆后, 直接输入A菜单的url,不可以访问(同时也没有向服务器发现该url的请求)。
一直不明白,为什么这造成这样的原因?
说是session没清除?
当无权限时,会执行如下代码:
//没权限,清空session中的值
session.invalidate();
String url = request.getContextPath();
response.setContentType("text/html;charset=UTF-8");
//response.setHeader("Pragma","No-cache");
//response.setHeader("Cache-Control","no-cache");
//response.setDateHeader("Expires", 0);
PrintWriter out = response.getWriter();
out.print("<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>");
out.print("<script>");
out.print("alert('你没有足够的权限进行此操作!');");
out.print("parent.document.location.href='" + url + "';");
out.print("</script>");
out.close();
同时,如果是关闭IE重新用A用户登陆访问A菜单,就可以。
经分析,目前认为是这样:
当无权限访问时,首次会执行这段代码。
然后,无权限的url的内容就被替换为上述代码所形成的静态页面(html)的内容了。
记得IE有这么一种功能,客户端第一次向服务器发出请求,服务器响应,客户端收到请求后,存入当前会话缓存中。
当客户端第二次向服务器发现同样的请求时,实际上,IE并没有马上就向服务器发出请求,而是先查询本地的缓存中,
是否存在相同请求的内容,如果有,直接返回该内容,如无(上次的请求在此刻已失效),才再次向服务器发出请求。
这也就是为什么会出现这样情况的原因。
然后,在形成此html内容时,在响应头添加相关属性(将响应设为无缓存控制),如下:
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
此时,每次访问同样无权限的菜单时,它都会向服务器发出请求。