Попытка получить пользователя из браузера в Java Rest - PullRequest
0 голосов
/ 11 декабря 2019

Так что я схожу с ума здесь. Там, где я работаю, каждый автоматически заходит на главную домашнюю страницу компании, и это отображается и на других внутренних страницах. Я создаю Java Rest API и мне нужно добавить пользователя, уже сохраненного в браузере.

У меня есть проект Dynamic, использующий Джерси, и он работает, как и ожидалось.

Я искалпо-разному, и этот ниже постоянно возвращает ноль.

@Context
protected SecurityContext sc;

, и я пытаюсь, что VIA это ..

System.out.println(sc.getUserPrincipal());

или

System.out.println(sc.getAuthenticationScheme());

и оба возвращают NULL.

Я видел кое-что о коде JSP, который должен был вытянуть текущего пользователя браузера.

<%@ page import="java.util.Base64" %>
<%@ page import="java.util.regex.Matcher"%>
<%@ page import="java.util.regex.Pattern"%>
<%
HttpSession sess = request.getSession(); 

String auth = request.getHeader("Authorization");
String result = "";
String which = "not NTLM ";
Base64.Encoder mimeEncoder = Base64.getMimeEncoder();
Base64.Decoder mimeDecoder = Base64.getMimeDecoder();
if (auth == null) {
    response.setStatus(response.SC_UNAUTHORIZED);
    response.setHeader("WWW-Authenticate", "NTLM");
    return;
}
if (auth.startsWith("NTLM ")) { 
    which = "NTLM ";
    byte[] msg = mimeDecoder.decode(auth.substring(5));
    int off = 0, length, offset;
    String s;

    if (msg[8] == 1) { 
        off = 18;

        byte z = 0;
        byte[] msg1 =
            {(byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S',
            (byte)'S', (byte)'P', z,
            (byte)2, z, z, z, z, z, z, z,
            (byte)40, z, z, z, (byte)1, (byte)130, z, z,
            z, (byte)2, (byte)2, (byte)2, z, z, z, z,
            z, z, z, z, z, z, z, z};
        response.setStatus(response.SC_UNAUTHORIZED);
        response.setHeader("WWW-Authenticate", "NTLM " + mimeEncoder.encodeToString(msg1).trim());
        return;
    } 
    else if (msg[8] == 3) { 
        off = 30;
        length = msg[off+17]*256 + msg[off+16];
        offset = msg[off+19]*256 + msg[off+18];
        s = new String(msg, offset, length);
    } 
    else {
        return;
    }

    length = msg[off+1]*256 + msg[off];
    offset = msg[off+3]*256 + msg[off+2];
    s = new String(msg, offset, length);
    length = msg[off+9]*256 + msg[off+8];
    offset = msg[off+11]*256 + msg[off+10];
    s = new String(msg, offset, length);    

    result=s.replaceAll("\\W", "");

}
%>
<p>Username: <%=result %> <%=which %></p>

Это фактически возвращает текущее имя пользователя браузера.

Так что же я делаю неправильно в Java Rest, который мешает ему вводить имя пользователя? Нужно ли заставлять человека входить в Rest? На самом деле не хочу этого делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...