在java后台服务器,如何根据HttpSession获得客户端ip?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java后台服务器,如何根据HttpSession获得客户端ip?相关的知识,希望对你有一定的参考价值。
只能根据用户请求带过来的sessionID所匹配的ip地址 而且只可以通过request获得ip 反正你能得到session 那得到request是一样简单的不是吗得到request后命令为:
String ip = request.getRemoteAddr();
这个ip字符串就是了追问
HttpSessionListener 当监听到一个session建立时,能得到request吗?如何得到,如不能得到那么能不能通过监听的HttpSessionEvent得到?
追答你需要实现ServletRequestListener 接口
在类中声明 HttpServletRequest request;
然后在你需要的地方调用 String ip = request.getRemoteAddr();
然后在类里声明它的一个实现方法:
public void requestInitialized(ServletRequestEvent event)
request = (HttpServletRequest)event.getServletRequest();
最后需要在web.xml中配置:
com.eaie.system.SessionListener
需要注意的是LISTENR的位置,必须在的相关配置之后,在的相关配置之前
我希望在HttpSessionListener监听中,监听到一个session就获取到它的ip ?能实现吗
我应该如何将代码放在 Java 的后台线程中?
【中文标题】我应该如何将代码放在 Java 的后台线程中?【英文标题】:How should I put code in Background Thread in Java? 【发布时间】:2021-07-22 17:55:03 【问题描述】:我正在使用将一些数据上传到服务器的 API,我将其部署在 android 应用程序上。
我使用 Postman 测试了 API,它工作得非常好,并且从 postman 生成了代码
登录代码:
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("username","abc@abc.com")
.addFormDataPart("password","E1234567")
.build();
Request request = new Request.Builder()
.url("192.168.1.51/auth/login")
.method("POST", body)
.addHeader("User-Agent", "Koala Admin")
.addHeader("Content-Type", "application/json")
.addHeader("Cookie", "session=3d9c1888-e9b0-40b3-958b-71c50538d338")
.build();
Response response = client.newCall(request).execute();
创建用户并上传照片
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("subject_type","1")
.addFormDataPart("name","jasim")
.addFormDataPart("start_time","1619496549")
.addFormDataPart("end_time","1619525349")
.addFormDataPart("photo","/C:/Users/jasim/Pictures/Camera Roll/WIN_20210422_14_54_39_Pro.jpg",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("/C:/Users/jasim/Pictures/Camera Roll/WIN_20210422_14_54_39_Pro.jpg")))
.build();
Request request = new Request.Builder()
.url("192.168.1.51/subject/file")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Cookie", "session=3d9c1888-e9b0-40b3-958b-71c50538d338")
.build();
Response response = client.newCall(request).execute();
现在我想知道如何将这些代码放在 AsyncTask 类中并在后台制作必要的代码。
【问题讨论】:
为什么不使用改造? 我对改造一无所知。你能帮我处理这段代码吗?如何放入后台线程。谢谢 您可以使用@shmakova 的答案 @Amin 我需要你的另一个帮助。我的 api 请求中有 cookie 标头,每次我必须从邮递员那里复制这个 cookie 并粘贴到我的代码中以使其工作。如何在我的应用程序中生成 cookie 并在 cookie 标头中给出该值? 这可能会帮助你***.com/questions/32963394/… 【参考方案1】:您可以调用enqueue
方法而不是execute
,它将在后台线程上工作:
client.newCall(request).enqueue(new Callback()
@Override
public void onResponse(Call call, Response response) throws IOException
// handle your response
@Override
public void onFailure(Call call, IOException e)
// handle the failure
);
【讨论】:
真的吗?这种方法会像 doInBackground() 一样工作吗? 它将在自己的 okttp 调度程序上运行。 @JASIMCHOUHAN 嗨@shmakova,我需要你的另一个帮助。我的 api 请求中有 cookie 标头,每次我必须从邮递员那里复制这个 cookie 并粘贴到我的代码中以使其工作。如何在我的应用程序中生成 cookie 并在 cookie 标头中给出该值?以上是关于在java后台服务器,如何根据HttpSession获得客户端ip?的主要内容,如果未能解决你的问题,请参考以下文章