2024.5.31
今天将网络安全部分的后端servlet代码进行了完善,相关代码如下:
package com.example.three; import com.fasterxml.jackson.databind.JsonNode; import com.google.gson.Gson; import com.google.gson.JsonObject; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.io.PrintWriter; import java.sql.*; //@WebServlet(name="FinishServlet",value="/finishpro-servlet") public class FinishServlet extends HttpServlet { public String getAccessToken() throws Exception { String clientId = "9B8HzZ4FpaUWW5mt975LEzoP"; String clientSecret = "KHHt5wIrGjIRZmLMiXzo6UdXYGOwmMSC"; String url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + clientId + "&client_secret=" + clientSecret; HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .header("Content-Type", "application/json") .header("Accept", "application/json") .POST(HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); ObjectMapper mapper = new ObjectMapper(); Map<String, Object> responseMap = mapper.readValue(response.body(), Map.class); return (String) responseMap.get("access_token"); } private static final long serialVersionUID=1L; JDBC jdbc=new JDBC(); public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{ response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); // 设置响应内容类型 response.setContentType("application/json"); // 从请求中读取 JSON 数据 JsonObject requestData = new Gson().fromJson(request.getReader(), JsonObject.class); String problem=requestData.get("problem").getAsString(); String answer=requestData.get("answer").getAsString(); String username=requestData.get("username").getAsString(); //获取token try { String accessToken = getAccessToken(); System.out.println(accessToken); String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/chatglm2_6b_32k?access_token=" + accessToken; // Constructing the payload Map<String, Object> payloadMap = new HashMap<>(); Map<String, String> message = new HashMap<>(); message.put("role", "user"); String st = "问题:" + problem + "用户的答案:" + answer + ",根据问题以及用户的答案进行评价与纠正,控制在200字以内。"; message.put("content", st); payloadMap.put("messages", new Map[]{message}); ObjectMapper mapper = new ObjectMapper(); String payload = mapper.writeValueAsString(payloadMap); HttpClient client = HttpClient.newHttpClient(); HttpRequest request1 = HttpRequest.newBuilder() .uri(URI.create(url)) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(payload)) .build(); HttpResponse<String> response1 = client.send(request1, HttpResponse.BodyHandlers.ofString()); // Print the response System.out.println(response1.body()); JsonNode responseNode = mapper.readTree(response1.body()); JsonNode resultNode = responseNode.get("result"); answer = resultNode.asText(); } catch (Exception e) { e.printStackTrace(); } System.out.println(problem); String number=""; String finishresult=""; try { String sql1="select * from threelogin where user = '"+username+"'"; Statement statement=jdbc.getConnection().createStatement(); ResultSet res=statement.executeQuery(sql1); while(res.next()){ number=res.getString("number"); finishresult=res.getString("finishresult"); } res.close(); statement.close(); jdbc.getConnection().close(); if(Integer.parseInt(number)>=5){ number="0"; finishresult=null; } number= Integer.toString(Integer.parseInt(number)+1); if(finishresult==null) finishresult=(Integer.toString(Integer.parseInt(number))+"、"+problem+"\n答:"+answer+"\n\n\n\n\n"); else finishresult+=(Integer.toString(Integer.parseInt(number))+"、"+problem+"\n答:"+answer+"\n\n\n\n\n"); String sql2="update threelogin set number = '"+number+"',finishresult = '"+finishresult+"' where user ='"+username+"'"; PreparedStatement preparedStatement=jdbc.getConnection().prepareStatement(sql2); preparedStatement.executeUpdate(); } catch (SQLException | ClassNotFoundException e) { throw new RuntimeException(e); } // 构建响应数据 JsonObject responseData = new JsonObject(); responseData.addProperty("number", number); System.out.println(finishresult); responseData.addProperty("result",finishresult); // 将响应数据写回前端 PrintWriter out = response.getWriter(); out.print(responseData.toString()); out.flush(); } }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号