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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?