yajie1010 2008-09-08 16:36
浏览 206
已采纳

一个让人郁闷的问题

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中重复写了。有没有更好的方法?

  • 写回答

5条回答 默认 最新

  • iteye_3177 2008-09-08 18:05
    关注

    你的过滤器过滤是否登陆时,都进行了什么操作呢?
    用户登录后在session中保存自己的用户名,
    查看用户资料的action在通过过滤器时判断用户名与session中的是否一致。
    这样b就不可能查看到a的资料了吧。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?