请问,Java Web后台程序如何获得当前Web User Session的Windows用户名?

jamex 2018-01-09 03:48:46
请问,Java Web后台程序如何获得当前Web User Session的Windows用户名?

具体细节如下:
1. 我们公司有自己的Windows AD 域, 我们员工每天用公司的个人域用户名登录公司电脑的Windows,
2. 登录后,打开 IE浏览器, 访问我们自己用Java开发的一个内部网站页面, https://den-gendv-003/agentadmin/
3. 我的问题是,如何编程使得这个内部网站的页面能够显示出当前我已登录的Windows域用户名?

也就是说,我的Java Web 程序如何识别当前会话中已登录的Windows域用户?

开发运行环境如下:
Java + Tomcat + IE/Chrome + Windows Server 2012 + Windows 10

谢谢高手们!

另外,我以前开发ASP.NET + IIS的程序时,是用System.Web.UI.Page.User.Identity.Name 来得到上面的用户名。
using System.Web.UI;
if (Page.User.Identity.IsAuthenticated)
{
if (Session.IsNewSession || Session["CurrentUser"] == null)
RefreshCurrentUser(Page.User.Identity.Name);
。。。。

请问Java有没有类似的对象可用?
谢谢!


...全文
1110 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
你好sun悟空 2018-01-11
  • 打赏
  • 举报
回复
用js 可以直接获取到,然后再发送到后端即可 ,获取方式参照 :http://blog.csdn.net/kevinliuu/article/details/903737 亲测可以,但由于涉及到安全性问题,只能用ie浏览器.
那年花 2018-01-11
  • 打赏
  • 举报
回复
引用 10 楼 jamex 的回复:
[quote=引用 7 楼 qq_25543635 的回复:] [quote=引用 6 楼 qq_25543635 的回复:] 你可以不用搞那么麻烦 1. 我们公司有自己的Windows AD 域, 我们员工每天用公司的个人域用户名登录公司电脑的Windows,
也就是说 你可以同步你个人域的用户名 这样就可以知道谁登陆了[/quote] 能否解释一下 “你可以同步你个人域的用户名 这样就可以知道谁登陆了” 的具体做法?谢谢![/quote] 你公司员工登录的时候的用户名是唯一的啊 就判定这个用户名 就这个意思
东风玖哥 2018-01-11
  • 打赏
  • 举报
回复
你连这都不会呀?
jamex 2018-01-11
  • 打赏
  • 举报
回复
好像第一步,需要把Tomcat 配制成 接受 Windows认证方式。有谁做过的话,可以分享一下步骤吗? 谢谢!
jamex 2018-01-11
  • 打赏
  • 举报
回复
这些文章可以试试?有没有人试过? Tomcat/Java get logged in windows/domain user? https://www.experts-exchange.com/questions/24854979/Tomcat-Java-get-logged-in-windows-domain-user.html httpcontext in Java RESTful service https://stackoverflow.com/questions/42432836/httpcontext-in-java-restful-service Need currently logged in Windows user name in java https://stackoverflow.com/questions/31318378/need-currently-logged-in-windows-user-name-in-java
jamex 2018-01-11
  • 打赏
  • 举报
回复
引用 13 楼 dongfeng9ge 的回复:
你连这都不会呀?
请指教,谢谢!
什么都不能 2018-01-11
  • 打赏
  • 举报
回复
你要做办公电脑和你的系统做sso之前有公司这样做过,打开办公网portal可以免登录,然后再从portal到其他系统做sso,这个没有研究过,相比应该用到微软的方案
ZHOU西口 2018-01-10
  • 打赏
  • 举报
回复
1、简单的做法,初次登录成功后,在服务端存session,设置失效周期。如果LZ使用了jsp,那么jsp内置对象应该是支持的。 2、可以参考一下:https://www.cnblogs.com/sdgf/p/4909166.html
jamex 2018-01-10
  • 打赏
  • 举报
回复
引用 7 楼 qq_25543635 的回复:
[quote=引用 6 楼 qq_25543635 的回复:] 你可以不用搞那么麻烦 1. 我们公司有自己的Windows AD 域, 我们员工每天用公司的个人域用户名登录公司电脑的Windows,
也就是说 你可以同步你个人域的用户名 这样就可以知道谁登陆了[/quote] 能否解释一下 “你可以同步你个人域的用户名 这样就可以知道谁登陆了” 的具体做法?谢谢!
jamex 2018-01-10
  • 打赏
  • 举报
回复
引用 7 楼 qq_25543635 的回复:
[quote=引用 6 楼 qq_25543635 的回复:] 你可以不用搞那么麻烦 1. 我们公司有自己的Windows AD 域, 我们员工每天用公司的个人域用户名登录公司电脑的Windows,
也就是说 你可以同步你个人域的用户名 这样就可以知道谁登陆了[/quote]
引用 5 楼 splendid_java 的回复:
[quote=引用 4 楼 jamex 的回复:] [quote=引用 2 楼 splendid_java 的回复:] 好像有,第三方插件
可否告知是哪个第三方插件?谢谢!![/quote]

Map<String, String> map = System.getenv();
String userName = map.get("USERNAME");// 获取用户名
System.out.println(userName);
我的理解是获取系统登录名,但是看你上面描述应该是获取你公司域中的一个用户。 当然这两类用户有可能是统一的(用户名密码保持一致)。[/quote] 可能我没说清楚,我的Java Web程序在Tomcat服务器端,而我的目的是让服务器程序通过Web Page 的会话信息获取到客户端传来的Windows 用户名。 其实,我的最终目的是想做个SSO的免登陆验证,客户端用户不必再一次在Web页面上输入用户名和密码,凭借着他当前客户端的Windows登陆账号,直接通过Web服务端的验证。 请指教!
jamex 2018-01-10
  • 打赏
  • 举报
回复
引用 5 楼 splendid_java 的回复:
[quote=引用 4 楼 jamex 的回复:] [quote=引用 2 楼 splendid_java 的回复:] 好像有,第三方插件
可否告知是哪个第三方插件?谢谢!![/quote]

Map<String, String> map = System.getenv();
String userName = map.get("USERNAME");// 获取用户名
System.out.println(userName);
我的理解是获取系统登录名,但是看你上面描述应该是获取你公司域中的一个用户。 当然这两类用户有可能是统一的(用户名密码保持一致)。[/quote] 可能没说清楚,我的Java Web程序在服务器端,而我的目的是让服务器程序通过Web Page 的会话信息获取 客户端的Windows 用户名。 System.getenv(); 应该只能获得本机环境,也就是服务器的环境吧? 其实,我的最终目的是想做个SSO的免登陆验证,客户端用户不必再一次输入用户名和密码,凭借着他当前客户端的Windows登陆账号,直接通过Web服务端的验证。 请指教!
那年花 2018-01-10
  • 打赏
  • 举报
回复
引用 6 楼 qq_25543635 的回复:
你可以不用搞那么麻烦 1. 我们公司有自己的Windows AD 域, 我们员工每天用公司的个人域用户名登录公司电脑的Windows,
也就是说 你可以同步你个人域的用户名 这样就可以知道谁登陆了
那年花 2018-01-10
  • 打赏
  • 举报
回复
你可以不用搞那么麻烦 1. 我们公司有自己的Windows AD 域, 我们员工每天用公司的个人域用户名登录公司电脑的Windows,
ZHOU西口 2018-01-10
  • 打赏
  • 举报
回复
引用 4 楼 jamex 的回复:
[quote=引用 2 楼 splendid_java 的回复:] 好像有,第三方插件
可否告知是哪个第三方插件?谢谢!![/quote]

Map<String, String> map = System.getenv();
String userName = map.get("USERNAME");// 获取用户名
System.out.println(userName);
我的理解是获取系统登录名,但是看你上面描述应该是获取你公司域中的一个用户。 当然这两类用户有可能是统一的(用户名密码保持一致)。
jamex 2018-01-10
  • 打赏
  • 举报
回复
引用 2 楼 splendid_java 的回复:
好像有,第三方插件
可否告知是哪个第三方插件?谢谢!!
ZHOU西口 2018-01-09
  • 打赏
  • 举报
回复
好像有,第三方插件
jamex 2018-01-09
  • 打赏
  • 举报
回复
跪求高手出现!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧