Проверка подлинности Windows и получение адреса электронной почты с использованием jsp
Я пытаюсь реализовать проверку подлинности Windows, используя стороннюю библиотеку "Вафли". Проблема, с которой я сталкиваюсь, заключается в том, как получить почтовый идентификатор пользователя, если мы знаем идентификатор пользователя и домен. Например, я могу получить идентификатор пользователя как XYZ\phembr и хочу получить адрес электронной почты (в данном случае phembrom@xyz.com) с SMTP-сервера. Ниже приведен код jsp, который я использую, и вывод, который я получаю.
<%@page import="java.security.Principal" %>
<%@page import="waffle.windows.auth.WindowsAccount" %>
<%@page import="waffle.servlet.WindowsPrincipal" %>
<%@page import="com.sun.jna.platform.win32.Secur32" %>
<%@page import="com.sun.jna.platform.win32.Secur32Util" %>
<%
if (request.getParameter("logoff") != null) {
session.invalidate();
response.sendRedirect("index.jsp");
return;
}
%>
<html>
<head>
<title>Protected Page for Examples</title>
</head>
<body bgcolor="white">
Welcome <b><%= Secur32Util.getUserNameEx(Secur32.EXTENDED_NAME_FORMAT.NameDisplay) %></b> <br>
You are logged in as remote user <b><%= request.getRemoteUser() %></b> in session <b><%= session.getId() %></b>.<br>
You are impersonating user <b><%= Secur32Util.getUserNameEx(Secur32.EXTENDED_NAME_FORMAT.NameSamCompatible) %> </b>.
<br><br>
<%
if (request.getUserPrincipal() != null) {
%>
Your user principal name is <b><%= request.getUserPrincipal().getName() %></b>.<br>
Your email is <b><%= Secur32Util.getUserNameEx(Secur32.EXTENDED_NAME_FORMAT.NameUserPrincipal) %></b>.
<br><br>
<%
} else {
%>
No user principal could be identified.
<br><br>
<%
}
%>
</body>
Вывод, который я получаю: (Обратите внимание, что я должен был получить phembrom@xyz.com, а не phembr@xyz.com)
Welcome Prashant Kumar Hembrom
You are logged in as remote user XYZ\phembr in session DB5376CCEF5FA13F6059AC679F0B95BE.
You are impersonating user XYZ\phembr .
Your user principal name is XYZ\phembr.
Your email is phembr@xyz.com.
1 ответ
Ответы даны в FAQ: https://github.com/dblock/waffle/blob/master/Docs/faq/AdditionalActiveDirectoryInfo.md
Вы не можете сделать это напрямую с Waffle. В Windows это можно сделать, запросив Active Directory через ADSI. Это включает в себя поиск записи пользователя по SID, полученному при входе в систему, и получение любой дополнительной информации.
Две реализации: