創建FormAuthenticator
併爲ServletContextHandler
設置這對你SecurityHandler
。這段代碼創建了一個包含2個servlet的普通服務器。第一個servlet使用hello messsage來響應已認證的用戶名。第二個servlet實現了一個簡單的登錄表單。
您應該可以將代碼粘貼到main[]
並運行(您需要在類路徑中使用以下jar; jetty-server
,jetty-servlet
和jetty-security
)。要測試,請在http://localhost:8080
處指向瀏覽器,在看到hello username
的響應之前,應該提示您輸入憑據(用戶名/密碼)。
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS | ServletContextHandler.SECURITY);
context.addServlet(new ServletHolder(new DefaultServlet() {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("hello " + request.getUserPrincipal().getName());
}
}), "/*");
context.addServlet(new ServletHolder(new DefaultServlet() {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("<html><form method='POST' action='/j_security_check'>"
+ "<input type='text' name='j_username'/>"
+ "<input type='password' name='j_password'/>"
+ "<input type='submit' value='Login'/></form></html>");
}
}), "/login");
Constraint constraint = new Constraint();
constraint.setName(Constraint.__FORM_AUTH);
constraint.setRoles(new String[]{"user","admin","moderator"});
constraint.setAuthenticate(true);
ConstraintMapping constraintMapping = new ConstraintMapping();
constraintMapping.setConstraint(constraint);
constraintMapping.setPathSpec("/*");
ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler();
securityHandler.addConstraintMapping(constraintMapping);
HashLoginService loginService = new HashLoginService();
loginService.putUser("username", new Password("password"), new String[] {"user"});
securityHandler.setLoginService(loginService);
FormAuthenticator authenticator = new FormAuthenticator("/login", "/login", false);
securityHandler.setAuthenticator(authenticator);
context.setSecurityHandler(securityHandler);
server.start();
server.join();
沒有設法使它工作... – oshai
謝謝!這對我有幫助,並且我能夠使其工作。 – mwhidden
這是有幫助的,但我想知道你是如何知道這麼做的。 Jetty文檔是...沒有粗魯,稀疏。例如'ConstraintMapping'完全沒有文檔,Google根本沒有提供任何有關它的信息。你是否需要閱讀內部Jetty代碼來學習它? – Timmmm