Spring boot 在spring引导应用程序中获取系统用户信息

Spring boot 在spring引导应用程序中获取系统用户信息,spring-boot,spring-security,Spring Boot,Spring Security,尝试在spring引导应用程序中实现SSO功能。 我需要获取当前登录的OS用户(windows),以便在Active Directory中查找并检索角色 我见过一些使用SecurityContextHolder的示例,但这似乎与具有集成身份验证机制的web应用程序有关 知道如何在spring应用程序中获取当前windows用户吗 谢谢试试这个,may可以在ie和chrome上使用: public String WindowsUserDemo(HttpServletRequest req

尝试在spring引导应用程序中实现SSO功能。 我需要获取当前登录的OS用户(windows),以便在Active Directory中查找并检索角色

我见过一些使用SecurityContextHolder的示例,但这似乎与具有集成身份验证机制的web应用程序有关

知道如何在spring应用程序中获取当前windows用户吗


谢谢

试试这个,may可以在ie和chrome上使用:

    public String  WindowsUserDemo(HttpServletRequest request, HttpServletResponse response) {
            String auth = request.getHeader("Authorization");
            if (auth == null) {
                response.setStatus(response.SC_UNAUTHORIZED);
                response.setHeader("WWW-Authenticate", "NTLM");
                try {
                    response.flushBuffer();
                } catch (IOException e) {
                    //e.printStackTrace();
                }
            }
            if (auth.startsWith("NTLM ")) {
                byte[] msg = new byte[0];
                try {
                    msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                int off = 0, length, offset;
                if (msg[8] == 1) {
                    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.setHeader("WWW-Authenticate", "NTLM " + new sun.misc.BASE64Encoder().encodeBuffer(msg1));
                    try {
                        response.sendError(response.SC_UNAUTHORIZED);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else if (msg[8] == 3) {
                    off = 30;

                    length = msg[off + 17] * 256 + msg[off + 16];
                    offset = msg[off + 19] * 256 + msg[off + 18];
                    String remoteHost = new String(msg, offset, length);

                    length = msg[off + 1] * 256 + msg[off];
                    offset = msg[off + 3] * 256 + msg[off + 2];
                    String domain = new String(msg, offset, length);

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

                    return remoteHost+"name:"+username+",domain:"+domain;
                }
            }
            return "error";
}

在广告中查找角色/组成员身份通常不需要密码。服务帐户可以这样做(需要其凭据,但不需要当前用户的凭据),或者如果合适,它可能已经是世界可读的。相关阅读:和