WAFFLE是什么?

WAFFLE是一个Windows认证框架,支持Negotiate, NTLM和Kerberos认证。WAFFLE包含Windows认证相关的C#和Java库。WAFFLE主页 http://dblock.github.io/waffle/

Jetty简介参见 http://www.cnblogs.com/leo100w/p/3809880.html

Jetty支持Windows认证

Jetty作为web服务器和Servlet容器,支持自定义的Filter和Servlet。而Waffle通过Filter实现Windows认证。因此,要使Jetty支持Windows认证就很简单了,只要将Waffle作为自定义Filter加入Jetty就可以了。

DEMO

  1. 下载Jetty, Waffle,并解压;下载jetty-all包(在这里下载 http://central.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/
  2. 新建一个Java项目
  3. 将Waffle\bin中的guava-13.0.1.jar, jna-3.5.0.jar, platform-3.5.0.jar, slf4j-api-1.7.2.jar, waffle-jetty.jar, waffle-jna.jar库加入到项目的build路径中
  4. 将Jetty\lib\servlet-api-3.1.jar以及jetty-all-9.2.1.v20140609.jar加入到项目的build路径中
  5. 创建HelloServlet类
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet {
    /**
    *
    */
    private static final long serialVersionUID = -2345771005431135205L; @Override
    protected void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    response.setStatus(HttpServletResponse.SC_OK);
    response.getWriter().println(
    "<h1>Hello " + request.getRemoteUser() + "!<br/>Role: "
    + request.getUserPrincipal().getName() + "</h1>");
    }
    }
  6. 创建JettyWaffleTest类
    import java.util.EnumSet;
    
    import javax.servlet.DispatcherType;
    
    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.servlet.ServletContextHandler; public class JettyWaffleTest {
    public static void main(String[] args) throws Exception {
    Server server = new Server(8080); EnumSet<DispatcherType> dispatches = EnumSet
    .allOf(DispatcherType.class);
    ServletContextHandler context = new ServletContextHandler(
    ServletContextHandler.SESSIONS);
    context.addFilter(waffle.servlet.NegotiateSecurityFilter.class, "/*",
    dispatches);
    context.addServlet(HelloServlet.class, "/");
    context.setContextPath("/"); server.setHandler(context); server.start();
    server.join();
    }
    }
  7. 运行。结果如下
    Hello demo!
    Role: demo

小结

从DEMO可以看出,我们可以通过request.getRemoteUser()获取远程用户登录的Windows用户,当然也可以通过request.getUserPrincipal()获取Principal,该Principal是一个waffle.servlet.WindowsPrincipal类型,通过该类型可以进一步获取各种Windows认证的相关信息。

Jetty支持Windows认证的更多相关文章

  1. 自定义HttpModule,用于未登录用户,不弹出Windows认证窗口,而是跳转回SSO站点

    2012年的一篇随笔记录,可以学习到如何自定义HttpModule,而具体里面针对需求开发的代码,可能未必能让大伙了解到什么,可快速扫描而过. using System; using System.W ...

  2. 彻底理解Windows认证1

    彻底理解Windows认证 一.Windows本地认证 1. 我的密码在哪里? 路径:C:\Windows\System32\config\SAM 当我们登录系统的时候,系统会自动的读取SAM文件中的 ...

  3. windows认证解读

    0x00 本地认证 本地认证基础知识 在本地登录Windows的情况下,操作系统会使用用户输入的密码作为凭证去与系统中的密码进行验证,但是操作系统中的密码存储在哪里呢? %SystemRoot%\sy ...

  4. Windows认证体系解读

    目录 Windows认证方式 Windows本地认证 NTLM认证方式(工作组环境中) wiresharek抓包NTLMv2,使用Hashcat爆破 NTLM认证方式(域环境中) Kerberos认证 ...

  5. 内网渗透之Windows认证(二)

    title: 内网渗透之Windows认证(二) categories: 内网渗透 id: 6 key: 域渗透基础 description: Windows认证协议 abbrlink: d6b7 d ...

  6. iConvert Icons 图标转换生成利器,支持Windows, Mac OS X, Linux, iOS,和Android等系统

    这是一款在线图标转换工具,生成的图标支持Windows, Mac OS X, Linux, iOS, 和 Android等主流系统. 可以上传图标文件转化成另一个平台下的图标文件,例如将windows ...

  7. SVN二次开发——让SVN、TSVN(TortoiseSVN)支持windows的访问控制模型、NTFS ADS(可选数据流、NTFS的安全属性)

    SVN二次开发 ——让SVN.TSVN(TortoiseSVN)支持windows的访问控制模型.NTFS ADS (可选数据流.NTFS的安全属性) SVN secondary developmen ...

  8. 告示:CSDN博客通道支持Windows Live Writer写blog离线好友

    尊敬的各位CSDN用户: 您好! 为了更好的服务客户.CSDN已经支持Windows Live Writer离线写博客啦.Windows Live Writer于2014年5月29日正式上线啦!欢迎大 ...

  9. asp.net权限认证:Windows认证

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

随机推荐

  1. 浙江大学2015年校赛F题 ZOJ 3865 Superbot BFS 搜索

    不知道为什么比赛的时候一直想着用DFS 来写 一直想剪枝结果还是TLE = = 这题数据量不大,又是问最优解,那么一般来说是用 BFS 来写 int commandi[4] = {1, 2, 3, 4 ...

  2. html向servlet传乱码解决办法

    html 设置为utf-8格式 <meta http-equiv="content-type" content="text/html;charset=UTF-8&q ...

  3. Linux环境下编译并执行ava helloworld程序

    原文:http://blog.lupaworld.com/home-space-uid-24466-do-blog-id-2578.html 已经学会怎样在Windows下怎样编辑,编译和运行Java ...

  4. SimpleDateFormat使用具体解释

      public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的详细类. 它同意格式化 ...

  5. C 语言学习 之搭建环境和熟悉命令

    Open Terminal 打开终端To run a command as administrator (user "root"), use "sudo <comm ...

  6. Visual Studio 2012的新技术特性

    前言 我更换了VS2012开发工具,那么它有什么特性呢? [caption id="attachment_1235" align="alignnone" wid ...

  7. c语言统计字符数(判断a-z哪个字符出现次数最多)

    http://poj.grids.cn/practice/2742 描述判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多输入第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z ...

  8. c语言利用指针计算字符串的长度

    可以用strlen函数,这里我们自己写一个. 注意:不能用scanf,scanf一遇到空格就认为输入结束.应该用gets(),遇到换行符或EOF结束.说明可以接受空格. #include<cst ...

  9. vi/vim高级命令集粹

    vi/vim高级命令集粹 (ctrl +v过来 留着以后看) 1.交换两个字符位置 xp 2.上下两行调换 ddp 3.把文件内容反转 :g/^/m0/ (未通过) 4.上下两行合并 J 5.删除所有 ...

  10. 基于visual Studio2013解决C语言竞赛题之1037数组求列和

          题目 解决代码及点评 /* 功能:已知有三个数组A,B,C,A为5行5列的二维数组,B.C为只有5个元素的一维数组,键盘输入数据的顺序如下: 23,45,6,1,- ...