登录玩安卓(www.wanandroid.com),打开主界面,下载并显示文章列表。 (1)实现登录功能。使用实验一实现的登录布局, 已知:网络地址如下: https://www.wanandroid.com/user/login 方法:POST 参数: username,password 登录成功,服务器端返回JSON串,如: {"data":{"admin":false,"chapterTops":[],"coinCount":658,"collectIds":[17666],"email":"","icon":"","id":90114,"nickname":"android2021","password":"","publicName":"android2021","token":"","type":0,"username":"android2021"},"errorCode":0,"errorMsg":""} 请从该地址获取json数据,并解析;其中: errorCode:0代表登录成功;登录失败,可以从errorMsg中获取错误信息。 登录界面如下:
时间: 2025-05-21 09:41:12 浏览: 13
### 实现登录功能并通过解析 JSON 数据获取状态
要通过 POST 请求向指定 URL 发送 `username` 和 `password` 参数,并解析返回的 JSON 数据以判断登录是否成功,可以按照以下方法实现。
#### 使用 Java 的 HttpClient 库发送 POST 请求
以下是完整的代码示例:
```java
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class LoginExample {
public static void main(String[] args) {
try {
String url = "https://www.wanandroid.com/user/login";
String username = "your_username"; // 替换为实际用户名
String password = "your_password"; // 替换为实际密码
JSONObject jsonInput = new JSONObject();
jsonInput.put("username", username);
jsonInput.put("password", password);
byte[] postDataBytes = jsonInput.toString().getBytes(StandardCharsets.UTF_8);
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; utf-8");
connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);
connection.getOutputStream().write(postDataBytes);
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { // 成功响应
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
response.append(line);
}
in.close();
JSONObject jsonResponse = new JSONObject(response.toString());
int errorCode = jsonResponse.getInt("errorCode");
if (errorCode == 0) {
System.out.println("登录成功!");
} else {
String errorMsg = jsonResponse.getString("errorMsg");
System.out.println("登录失败:" + errorMsg);
}
} else {
System.err.println("服务器未返回 HTTP OK 状态码: " + responseCode);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
---
#### 关键点说明
1. **设置请求头**
设置 `Content-Type` 为 `application/json` 表明我们发送的是 JSON 格式的参数[^3]。同时设置了 `Accept` 头部表明期望接收 JSON 响应。
2. **构建 JSON 输入对象**
使用 `JSONObject` 构建包含 `username` 和 `password` 字段的对象,并将其转换为字节数组以便写入到连接流中[^4]。
3. **处理响应数据**
如果服务器返回的状态码为 `HTTP_OK`(即 200),则读取输入流中的内容并解析为 JSON 对象。随后检查 `errorCode` 是否等于 0 来判断登录是否成功[^5]。
4. **错误消息提取**
当 `errorCode` 不为 0 时,从 `errorMsg` 中提取具体的错误信息并打印出来[^6]。
---
#### 可能遇到的问题及解决方案
如果运行过程中出现类似于 `[org/springframework/security/web/AuthenticationEntryPoint.class] cannot be opened...` 的异常,则可能是由于项目依赖中包含了 Spring Security 而未正确配置所致。可以通过排除相关依赖来解决问题,具体操作如下:
在项目的 POM 文件中添加以下配置以移除 Spring Boot Starter Security 的影响:
```xml
<dependency>
<groupId>略</groupId>
<artifactId>略common</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</exclusion>
</exclusions>
</dependency>
```
此外,在启动类中加入注解以禁用自动加载的安全模块:
```java
@SpringBootApplication(exclude = {
SecurityAutoConfiguration.class,
SecurityFilterAutoConfiguration.class,
ManagementWebSecurityAutoConfiguration.class
})
```
---
###
阅读全文
相关推荐












