# 第三次综合实验 **Repository Path**: homeOFlimu/third_comprehensive_experiment ## Basic Information - **Project Name**: 第三次综合实验 - **Description**: No description available - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-05-16 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JAVA EE企业级架构课程实验报告 **院(系)名称**:网络空间安全学院 **专业班级**: 17软卓一班 **学号**:201741412124 **姓名**:利牧 **实验题目**: 实验3 JavaBean **实验日期**:2019.5.10 **实验(上机)学时**: 2 **成绩**: ### 一、实验内容、要求 实现一个用户注册/登录模块,大致功能如下: - 启动首页为用户登录页,本地账号登录或莞工中央认证登录成功后,返回用户中心。 - 如果用户还没有用户名和密码,则请他/她先进行注册,注册信息写入一个文本文件中,注册成功后直接回到用户中心。 - 把存取用户名/密码及验证用户名/密码都放在一个JavaBean中,在bean中对用户的合法性进行验证。 - 登录不成功则返回登录页面,提示用户名不存在或密码错误。 - 如果用户选择莞工中央认证登录,则使用“工号”自动创建一个本地账号,密码预设为“123456”,并把莞工中央认证与本地账号关联。 - 任何页面发生错误时,请导向error.jsp。 - 使用JavaBean,实现下面的业务功能: a. 上传自己的照片。(照片保存在本地文件系统) b. 查看用户信息 ### 二、所采用的Java EE技术规范 - JSP - Filter - Servlet - HttpClient - jsonbean ### 三、实验的主要模块及其功能 **本地登录:** 获取前端网页post请求中的信息,读取txt文件中的用户信息,然后一一检验账号,密码是否符合 若正确则存入session中,错误则提示用户账号或者密码错误 ```java String username = request.getParameter("username"); String password = request.getParameter("password"); audit.audit_local(username,password,request,response); try { file = new FileInputStream("src/main/java/login.txt"); bf = new BufferedReader(new InputStreamReader(file)); String line = null; Jsonb jsonb = JsonbBuilder.create(); while ((line = bf.readLine())!= null&&!line.equals("")) { if(line==null)break; else { user personDTO = jsonb.fromJson(line, user.class); if (personDTO.getUsername().equals(username) && personDTO.getPassword().equals(password)) { login_flag = 0; Map login2 = new HashMap (); login2.put("password", personDTO.getPassword()); login2.put("username", personDTO.getUsername()); login2.put("email", personDTO.getemail()); login2.put("id", personDTO.getStu_number()); login2.put("img", personDTO.getImg()); session.setAttribute("login2", login2); break; } } } ``` **注册:** 获取前端网页post请求中的信息,并判断信息是否合法,合法则使用jsonbean完成json的转化,在转成字符串的形式存入txt文件中 ```java Jsonb jsonb = JsonbBuilder.create(); user userDto = new user(username, password, email, id, "images/user.png"); String st = jsonb.toJson(userDto); FileWriter fw = null; try { File f = new File("src/main/java/login.txt"); fw = new FileWriter(f, true); } catch (IOException e) { response.sendRedirect("/error.html"); } PrintWriter pw = new PrintWriter(fw); pw.println(st); pw.flush(); ``` **退出:** 清除key为login,login2的session,并重定向到index.jsp ```java request.getSession().removeAttribute("Login"); request.getSession().removeAttribute("Login2"); request.getSession().removeAttribute("path"); request.getSession().removeAttribute("flag"); response.sendRedirect("https://cas.dgut.edu.cn/logout?callback=http://localhost:8080/index.jsp"); ``` **检查机制(javabean)** 1.第三方登录检查: 检验是否存在与第三方学号的用户,若无则使用“工号”自动创建一个本地账号,密码预设为“123456”,若有则登陆该用户 ```java if (personDTO.getStu_number().equals(stu.getUsername())) { flag = 0; HttpSession session = request.getSession(true); Map login2 = new HashMap (); login2.put("password", personDTO.getPassword()); login2.put("username", personDTO.getUsername()); login2.put("id", personDTO.getStu_number()); login2.put("email", personDTO.getemail()); login2.put("img", personDTO.getImg()); session.setAttribute("userName", login2); break; } ``` 2.本地注册检查: 检查该注册信息是否合法 ```java while ((line = br.readLine()) != null&&!line.equals("")) { user personDTO = jsonb.fromJson(line, user.class); if (personDTO.getStu_number().equals(id)) { login_flag = 0; break; } } ``` 3.本地登录检查: 检查本地登录信息是否合法 ```java while ((line = bf.readLine())!= null&&!line.equals("")) { user personDTO = jsonb.fromJson(line, user.class); if (personDTO.getUsername().equals(username) && personDTO.getPassword().equals(password)) { login_flag = 0; Map login2 = new HashMap (); login2.put("password", personDTO.getPassword()); login2.put("username", personDTO.getUsername()); login2.put("email", personDTO.getemail()); login2.put("id", personDTO.getStu_number()); login2.put("img", personDTO.getImg()); session.setAttribute("login2", login2); break; } } ``` **图片上传:** 使用注解设置绝对路径完成上传照片,并获取图片信息filename @MultipartConfig(location = "文件所在地址"),然后通过session传给jsp进行修改。 ```java request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); HttpSession session = request.getSession(true); Part part = request.getPart("file"); String fileName = part.getSubmittedFileName(); System.out.println("上传文件的文件名: " + fileName); if(fileName==null || fileName.equals("")) response.sendRedirect("/error.html"); session.setAttribute("path",fileName); part.write(fileName); response.sendRedirect("/user.jsp"); ``` ### 四、程序运行时的输入数据/输出结果 #### 进入主页 ![登录页面](https://gitee.com/uploads/images/2019/0503/105518_b2a29621_4839312.png "1.png") #### 进入莞工登录界面 ![莞工登录](https://gitee.com/uploads/images/2019/0503/105614_b2bce59f_4839312.png "2.png") #### 登陆成功 ![用户页面](https://gitee.com/uploads/images/2019/0503/105634_6942dda0_4839312.png "3.png") #### 修改个人图片 ![修改](https://images.gitee.com/uploads/images/2019/0518/155500_57880469_4839312.png "6.png") #### 修改成功 ![成功](https://images.gitee.com/uploads/images/2019/0518/155624_23c336b7_4839312.png "7.png") #### 登录错误 ![错误页面](https://gitee.com/uploads/images/2019/0503/110107_c02ed71d_4839312.png "5.png") #### 注册页面 ![注册](https://images.gitee.com/uploads/images/2019/0518/160024_c42500c9_4839312.png "8.png") #### 注册完成并登录 ![本地登录](https://images.gitee.com/uploads/images/2019/0518/160138_fd8607ce_4839312.png "9.png") #### 本地登录成功 ![本地登录成功](https://images.gitee.com/uploads/images/2019/0518/160218_6a274137_4839312.png "10.png") #### 错误注册导致注册失败(使用相同的学号再注册) ![错误注册](https://images.gitee.com/uploads/images/2019/0518/160432_09cf6c85_4839312.png "11.png") ![失败](https://images.gitee.com/uploads/images/2019/0518/160450_82ad816a_4839312.png "12.png")