javaEE开发中遇到这样的问题:
数据库中有若干个用户:a,b,c
一个login页面,一个管理页面,一个退出页面.这其中有一个过滤器过滤是否登陆。
当用户a登陆后,可以查看自己的资料,http://127.0.0.1/haha/account.do?method=viewuser&userName=a
当这个url提交后服务器会给客户端显示出a的资料,而b用户没有登陆,a用户想看看b用户的资料,把后面的a换成b,提交后却看到了
b的详细资料。
怎样解决?现在的百度就有这样的漏洞。有高手没有给解决一下!!!!!
[b]问题补充:[/b]
// 过滤页面
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest myRequest = (HttpServletRequest) request;
HttpServletResponse myResponse = (HttpServletResponse) response;
HttpSession session = myRequest.getSession();
System.out.println("session Id:"+session.getId());
Object obj = session.getAttribute("loginUser");
Account account = (Account) obj;
String requestURI = myRequest.getRequestURI();
if(obj!=null || !"".equals(account.getUsername()) || !"".equals(session.getId()) || requestURI.endsWith("login.jsp") || requestURI.endsWith("login.do") || requestURI.endsWith("*.css") || requestURI.endsWith("*.js")){
filterChain.doFilter(request, response);
return; //不加return会出现异常
}else{
System.out.println("过滤掉一个非法请求!");
//返回到登录页面
request.getRequestDispatcher("../login.jsp").forward(request,response);
}
filterChain.doFilter(request, response);
return;
}
[b]问题补充:[/b]
fly_ever说的方法是可以,我只想写一次,就不用在每个action中重复写了。有没有更好的方法?