qq_33357956 2019-05-26 17:32 采纳率: 66.7%
浏览 1151
已采纳

java管理系统用户登录退出问题

一共有三个用户,管理员 教师 学生,按顺序登录退出没有任何问题,但是登录管理员并退出之后,登录教师再退出,这个时候如果还想登录管理员就不行,结果还是教师页面。然后按顺序登录退出管理员、教师、学生,再想登录教师或管理员都不行,全是学生界面,学生可以切换登录。。。不知道怎么搞得,

简化下问题就是:

登录退出再登录顺序:
管理员->教师->学生   OK

                                      管理员->教师->管理员   NO

                                      教师->学生->教师        NO

。。。。。。。。。。。。。。。。。。。。。。。

涉及的所有后端代码如下

/**
 * 用户登陆
 * @return
 */
    public void index() throws IOException {
       User user1 = userService.getUser(user);
        if (user1 != null){
            if (user1.getIsSh() == 1){
                if (user1.getRole().getEnName().equals("admin")){
                    ActionContext.getContext().getSession().put("user", user1);
                }
                if (user1.getRole().getEnName().equals("teacher")){
                    ActionContext.getContext().getSession().put("user1", user1);
                }
                if (user1.getRole().getEnName().equals("student")){
                    ActionContext.getContext().getSession().put("user2", user1);
                }
                map.put("flag", 1);
                map.put("url", "login_indexs.do");
                map.put("id", user1.getId());
                JsonUtils.toJson(map);
            } else {
                map.put("flag", 2);
                JsonUtils.toJson(map);
            }
        } else {
            map.put("flag", 3);
            JsonUtils.toJson(map);
        }
    }

//登陆页面
    public String login() {

        return SUCCESS;
    }

   //退出
    public String logout() {
        ActionContext ac = ActionContext.getContext();
        Map session = ac.getSession();
        session.remove("userName");
        session.remove("userId");
        return "login";
    }

  • 写回答

1条回答 默认 最新

  • 「已注销」 2019-05-26 20:12
    关注

    你三个session全部都要put的key都是一样名字,也就是说
    ActionContext.getContext().getSession().put("user", user1);
    ActionContext.getContext().getSession().put("user", user2);
    ActionContext.getContext().getSession().put("user", user3);
    user1,user2,user3代表老师,学生,管理员,前面的key一样,
    然后你的释放应该remove(user)
    如果像你这样,应该remove(user),remove(user1),remove(user2)
    否则按照你servlet识别的顺序,你应该先识别student才会一直跳转student页面的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 软件定义网络mininet和onos控制器问题
  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。