gpt4 book ai didi

Java HTTPServer 身份验证 - 客户端

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:08:06 29 4
gpt4 key购买 nike

我按照描述实现了一个非常简单的 HTTP 服务器 here .我设法通过使用 Authentication header 使身份验证工作,但我无法弄清楚如何从表单中获取凭据并使用它们对服务器进行身份验证。这通常是如何完成的?

代码:

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.BasicAuthenticator;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class SimpleHttpServer3 {

public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/info", new InfoHandler());
HttpContext hc1 = server.createContext("/get", new GetHandler());
hc1.setAuthenticator(new BasicAuthenticator("get") {
@Override
public boolean checkCredentials(String user, String pwd) {
return user.equals("admin") && pwd.equals("password");
}
});
server.setExecutor(null); // creates a default executor
server.start();
System.out.println("The server is running");
}

// http://localhost:8000/info
static class InfoHandler implements HttpHandler {
public void handle(HttpExchange httpExchange) throws IOException {
String response = "Use /get to authenticate (user:admin pwd:password)";
SimpleHttpServer3.writeResponse(httpExchange, response.toString());
}
}

static class GetHandler implements HttpHandler {
public void handle(HttpExchange httpExchange) throws IOException {
StringBuilder response = new StringBuilder();
response.append("<html><body>");
response.append("hello " + httpExchange.getPrincipal().getUsername());
response.append("</body></html>");
SimpleHttpServer3.writeResponse(httpExchange, response.toString());
}
}

public static void writeResponse(HttpExchange httpExchange, String response) throws IOException {
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
}

}

最佳答案

通常大多数人会使用像 Shiro 或 Spring Security 这样的身份验证框架。

这些框架在一个模式上注册一个 Servlet 过滤器,例如 /* 以对所有请求强制执行身份验证。它们将身份验证数据存储在 Servlet session 中以保持用户在请求之间登录,这通常由 HTTP 服务器通过 Cookie 隐式完成。他们还注册了一个特殊的上下文来接受基于表单的身份验证请求,例如对 /login 的 POST 请求。

这些基于表单的端点将读取,通常是 application/x-www-form-urlencoded,请求并提取提交的用户名和密码,以与服务器存储相同的方式散列密码密码并比较它们以验证身份验证主体。

关于Java HTTPServer 身份验证 - 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749928/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com