我做了登陆权限过滤器,但是之后出现的问题可能是缓存问题不知道怎么解决?

爱乔qiao 2015-12-10 01:37:53
我做了登陆权限过滤器,未登录时是不能访问如:部门资料、选型与报价、报销、部门事务这些链接的;登陆了才可以访问这些链接。
但是现在的问题是登陆之后,访问了部门资料、选型与报价、报销、部门事务这些链接,然后退出,退出之后未登录却变成了依然可以访问这些链接
希望有高手指点这是什么问题?
应该怎么解决?
我的过滤器代码如下:
[code=java][/
public class PermissionFilter implements Filter {

/**
* Default constructor.
*/
public PermissionFilter() {

}

/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
}

/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest req=(HttpServletRequest)request; //强制转换成HttpServletRequest
HttpServletResponse resp=(HttpServletResponse)response;

String servletPath=req.getServletPath();

HttpSession session=req.getSession();
//获取session对象中flag的值,强制转换成字符串类型
String flag=(String)session.getAttribute("flag");

System.out.println(servletPath);
System.out.println(session);
System.out.println(flag);




if(null!=servletPath&&(servletPath.equals("/02/login.jsp")||(servletPath
.equals("/index.jsp"))||(servletPath.equals("/checkServlet")))){
chain.doFilter(request, response);
}else if(servletPath.contains(".css")||servletPath.contains(".js")||servletPath.contains(".gif")||servletPath.contains(".png")){
chain.doFilter(request, response);
}
else{
if(null!=flag&&flag.equals("login_success")){
chain.doFilter(request, response);
}else if(null!=flag&&flag.equals("login_error")){

// 设定网页的到期时间,一旦过期则必须到服务器上重新调用
resp.setDateHeader("Expires", 0);
// Cache-Control 指定请求和响应应遵循的缓存机制 no-cache指示请求或响应消息是不能缓存的
resp.setHeader("Cache-Control", "no-cache");
// 用于设定禁止浏览器从本地缓存中调用页面内容,设定后一旦离开页面就无法从Cache中再调出
resp.setHeader("Pragma", "no-cache");

req.setAttribute("msg", "登录失败,请重新登陆<br/>");
req.setAttribute("return_uri", servletPath);
RequestDispatcher rd=req.getRequestDispatcher("/02/login.jsp");
rd.forward(req, resp);
}else{
// 设定网页的到期时间,一旦过期则必须到服务器上重新调用
resp.setDateHeader("Expires", 0);
// Cache-Control 指定请求和响应应遵循的缓存机制 no-cache指示请求或响应消息是不能缓存的
resp.setHeader("Cache-Control", "no-cache");
// 用于设定禁止浏览器从本地缓存中调用页面内容,设定后一旦离开页面就无法从Cache中再调出
resp.setHeader("Pragma", "no-cache");

req.setAttribute("msg", "尚未登录,请登陆<br/>");
req.setAttribute("return_uri", servletPath);
RequestDispatcher rd=req.getRequestDispatcher("/02/login.jsp");
rd.forward(req, resp);
}
}

}



/**
* @see Filter#destroy()
*/
public void destroy() {

}

}
code]
...全文
247 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱乔qiao 2015-12-17
  • 打赏
  • 举报
回复
引用 7 楼 qq_33366709 的回复:
没有必要那么打动干戈,只需要在session里面存储一个是否登录的标记就可以了或者session中存储登录的用户,退出时移出用户信息。
我写了上面的代码,但是只要是登陆后浏览的网页,退出后依然可以浏览,权限这时就不起作用
爱乔qiao 2015-12-16
  • 打赏
  • 举报
回复
引用 7 楼 qq_33366709 的回复:
没有必要那么打动干戈,只需要在session里面存储一个是否登录的标记就可以了或者session中存储登录的用户,退出时移出用户信息。
我在servlet存储了一个是否登陆的标记

if(bool){
				request.getSession().setAttribute("flag", "login_success");   //用于表明当前用户处于登录状态
				if(null!=returnUri){
					System.out.println("returnuri="+returnUri);
					rd=request.getRequestDispatcher(returnUri);
					rd.forward(request, response);
				}else{
					rd=request.getRequestDispatcher("index.jsp");
					rd.forward(request, response);
				}
			}else{
				request.getSession().setAttribute("flag", "login_error");
				request.setAttribute("msg", "输入的用户名或密码错误!");
				rd=request.getRequestDispatcher("index.jsp");
				rd.forward(request, response);				
			}
			
退出的代码用的invalidate

	request.getSession().invalidate();     //直接删除session对象
//		System.out.println("退出了"+request.getSession());
		response.sendRedirect(request.getContextPath()+"/index.jsp");		
qq_33366709 2015-12-14
  • 打赏
  • 举报
回复
没有必要那么打动干戈,只需要在session里面存储一个是否登录的标记就可以了或者session中存储登录的用户,退出时移出用户信息。
爱乔qiao 2015-12-14
  • 打赏
  • 举报
回复
引用 2 楼 u011120983 的回复:
清除session。
是用invalidate()吗
君莫傲 2015-12-11
  • 打赏
  • 举报
回复
session 是一种服务器端的缓存,你登陆之后,服务器也会有一定时间的缓存会记录你的信息,所以才会出现这样的问题
爱乔qiao 2015-12-11
  • 打赏
  • 举报
回复
引用 1 楼 u011225629 的回复:
你是用session缓存了,你可以将Session换成page试一下!
session为什么不能用
爱乔qiao 2015-12-11
  • 打赏
  • 举报
回复
引用 1 楼 u011225629 的回复:
你是用session缓存了,你可以将Session换成page试一下!
是用invalidate()吗
我要爆炸啦 2015-12-10
  • 打赏
  • 举报
回复
清除session。
君莫傲 2015-12-10
  • 打赏
  • 举报
回复
你是用session缓存了,你可以将Session换成page试一下!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧