我的目标是通过编程来配置一个带有BASIC身份验证的Jetty服务器。我已经设法让身份验证在使用像Postman这样的REST客户端时工作,并且总是发送身份验证头,但我希望用户在打开页面时使用Browaswers本地登录提示符提示输入。
下面的代码是我的当前状态。响应(401)和标题确实包括“WWW-Authenticate:basic realm=“thwCopRealm”",所以我不明白为什么不提示用户输入。
你能帮我配置服务器,这样用户将被提示使用浏览器本地登录提示登录吗?
Server server = new Server(8080);
HashLoginService loginService = new HashLoginService();
loginService.setName(REALM);
loginService.setConfig(Main.class.getResource("/users.txt").toString());
Constraint constraint = new Constraint(Constraint.__BASIC_AUTH, Roles.USER);
constraint.setAuthenticate(true);
ConstraintMapping constraintMapping = new ConstraintMapping();
constraintMapping.setConstraint(constraint);
constraintMapping.setPathSpec("/*");
ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler();
securityHandler.setAuthenticator(new BasicAuthenticator());
securityHandler.setRealmName(REALM);
securityHandler.setLoginService(loginService);
securityHandler.addRole(Roles.ADMIN);
securityHandler.addRole(Roles.USER);
securityHandler.addConstraintMapping(constraintMapping);
ExampleServlet copServlet = new ExampleServlet();
ServletHolder copServletHolder = new ServletHolder(copServlet);
ServletContextHandler handler = new ServletContextHandler();
handler.addServlet(copServletHolder, "/cop");
handler.setSecurityHandler(securityHandler);
server.addBean(loginService);
server.setHandler(handler);
1条答案
按热度按时间zqdjd7g91#
在发布这个问题几分钟后,我发现我的域管理员为了安全起见在我们的PC上禁用了基本身份验证提示(这是有道理的)。
我通过修改两行代码实现了我的目标:成为一个文摘而不是基础。
背景是Basic在许多情况下都非常不安全。它太容易丢失登录数据了,任何有信誉的服务器都应该使用更安全的东西。