首页 > 代码库 > Jetty支持Windows认证
Jetty支持Windows认证
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
- 下载Jetty, Waffle,并解压;下载jetty-all包(在这里下载 http://central.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/ )
- 新建一个Java项目
- 将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路径中
- 将Jetty\lib\servlet-api-3.1.jar以及jetty-all-9.2.1.v20140609.jar加入到项目的build路径中
- 创建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>"); }}
- 创建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(); }}
- 运行。结果如下
Hello demo!Role: demo
小结
从DEMO可以看出,我们可以通过request.getRemoteUser()获取远程用户登录的Windows用户,当然也可以通过request.getUserPrincipal()获取Principal,该Principal是一个waffle.servlet.WindowsPrincipal类型,通过该类型可以进一步获取各种Windows认证的相关信息。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。