# Experiment1 **Repository Path**: calivin9287/Experiment1 ## Basic Information - **Project Name**: Experiment1 - **Description**: No description available - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 《JAVA EE企业级架构》课程实验报告 院(系)名称:网络空间安全学院 专业班级: 17软件卓越2班 学号:201741412208 姓名:吴永满 实验题目: 实验1 Servlet编程 实验日期:2019/4/10 实验(上机)学时: 2 成绩: ## 一、实验内容、要求 实现一个用户注册/登录模块,大致功能如下: 1 启动首页为登录页 2 如果用户还没有用户名和密码,则请他/她先进行注册,注册信息写入一个文本文件中,注册成功后直接回到登录页 3 登录成功后则提示XXX登录成功 4 登录不成功则提示究竟是用户名不存在还是密码错误 5 其它你想到的情况,请多参看别的软件的登录页 ## 二、所采用的Java EE技术规范 1. JSP的基础语法 2. Filter配置 3. Serlet配置 4. HttpClient组件 ## 三、实验的主要模块及其功能 ### ALLFilter.java 该过滤器通过request.getSession()得到一个HttpSession对象,用于判断用户是否处于登录状态,如果是就重定向到index.jsp,如果不是就直接登出。 ### DataDTO1.java 定义发送POST请求的对象对应的java类 ### DataDTO2.java 定义接收第一个POST请求返回的JSON数据对应的java类 ### DataDTO3.java 定义接收第一个POST请求返回的学生信息JSON数据对应的java类 ### dgut.java 接受token,生成一个dataDTO1类的对象,并通过QuickStart.postJson发送到https://cas.dgut.edu.cn/ssoapi/v2/checkToken ```java String token = request.getParameter("token"); String userip = request.getLocalAddr(); DataDTO1 dataDTO1 = new DataDTO1(token, "javaee", "b3b52e43ccfd", userip); ``` 将返回的JSON字符串保存在S1中 通过Jsonb类方法.fromJson将s1转化为DataDTO2类的实体对象 ```java Jsonb jsonb = JsonbBuilder.create(); DataDTO2 dataDTO2 = jsonb.fromJson(s1, DataDTO2.class); ``` 接下来判断是否成功返回,如果成功则新建一个链表,将"access_token"的属性值和"openid"的属性值添加到其中,并通过QuickStart.post的方法发送到 https://cas.dgut.edu.cn/oauth/getUserInfo中,同样的,将返回的json字符串转化成DataDTO3的实体对象 最终将对象dataDTO3的所有属性值保存到Session中 ```java if (dataDTO2.getMessage()!=null&&dataDTO2.getMessage().equals("success")) { List list = new ArrayList<>(); list.add(new BasicNameValuePair("access_token", dataDTO2.getAccess_token())); list.add(new BasicNameValuePair("openid", dataDTO2.getOpenid())); String s2 = QuickStart.post("https://cas.dgut.edu.cn/oauth/getUserInfo", list); if(s2!=null&&s2=="{\n" + "\"error\":1,\n" + "\"message\":\"access-token不存在或已过期\"\n" + "}") { System.out.println("access-token不存在或已过期"); } else { DataDTO3 dataDTO3 = jsonb.fromJson(s2, DataDTO3.class); HttpSession httpSession = request.getSession(); httpSession.setAttribute("username", dataDTO3.getUsername()); httpSession.setAttribute("name", dataDTO3.getName()); httpSession.setAttribute("group", dataDTO3.getGroup()); httpSession.setAttribute("openid", dataDTO3.getOpenid()); httpSession.setAttribute("wx_openid", dataDTO3.getWx_openid()); response.sendRedirect("http://localhost:8080/index.jsp"); } } ``` ### index.jsp 该页面用于展示用户信息,同时由条件httpSession.getAttribute()是否为null来判断用户是否处于登录状态,依次决定是登录还是登出界面 ### login.html 登陆界面 ### logout.html 登出页面 ## 四、程序运行时的输入数据/输出结果 ![avatar](src/image/1.png) ![avatar](src/image/2.png) ![avatar](src/image/3.png) ## 五、实验流程图 ![avatar](src/image/4.png)