Jetty:重新启动后以编程方式进行身份验证不起作用
Jetty: programmatically authentication not working after reboot
我是 Jetty 的新手,正在开发一个测试应用程序来进行基本身份验证。项目中没有web.xml。一切都由代码处理。
这里是测试代码
Server server = new Server(8080);
LoginService loginService = new HashLoginService("MyRealm", path);
loginService.setRefreshInterval(5);
server.addBean(loginService);
ConstraintSecurityHandler security = new ConstraintSecurityHandler();
server.setHandler(security);
Constraint constraint = new Constraint();
constraint.setName("auth");
constraint.setAuthenticate(true);
constraint.setRoles(new String[] { "user", "admin" });
ConstraintMapping mapping = new ConstraintMapping();
mapping.setPathSpec("/*");
mapping.setConstraint(constraint);
security.setConstraintMappings(Collections.singletonList(mapping));
security.setAuthenticator(new BasicAuthenticator());
security.setLoginService(loginService);
HelloWorld hw = new HelloWorld();
security.setHandler(hw);
server.start();
这是我的测试realm.properties
guest:CRYPT:guVeRgi5kAY4k,user,admin
代码由测试 PDE 项目中的测试按钮触发。当服务器第一次启动时,它提示 window for username/password。我输入了 "guest" 和 "guest",它起作用了。但是在那之后,当我重新启动服务器时,它再也没有要求 username/password 了。页面未经身份验证加载。如果我在 realm 属性 文件中更改了密码,提示将再次出现,而且仍然只出现一次。我错过了什么?谢谢
标准 HTTP Cookie 和 Servlet 会话行为正在发生。
服务器重启不会导致客户端提供的Cookies失效。您需要配置 Cookie 和 Session 行为以满足您的需要(搜索 SessionCookieConfig
及其类似内容)。
我是 Jetty 的新手,正在开发一个测试应用程序来进行基本身份验证。项目中没有web.xml。一切都由代码处理。
这里是测试代码
Server server = new Server(8080);
LoginService loginService = new HashLoginService("MyRealm", path);
loginService.setRefreshInterval(5);
server.addBean(loginService);
ConstraintSecurityHandler security = new ConstraintSecurityHandler();
server.setHandler(security);
Constraint constraint = new Constraint();
constraint.setName("auth");
constraint.setAuthenticate(true);
constraint.setRoles(new String[] { "user", "admin" });
ConstraintMapping mapping = new ConstraintMapping();
mapping.setPathSpec("/*");
mapping.setConstraint(constraint);
security.setConstraintMappings(Collections.singletonList(mapping));
security.setAuthenticator(new BasicAuthenticator());
security.setLoginService(loginService);
HelloWorld hw = new HelloWorld();
security.setHandler(hw);
server.start();
这是我的测试realm.properties
guest:CRYPT:guVeRgi5kAY4k,user,admin
代码由测试 PDE 项目中的测试按钮触发。当服务器第一次启动时,它提示 window for username/password。我输入了 "guest" 和 "guest",它起作用了。但是在那之后,当我重新启动服务器时,它再也没有要求 username/password 了。页面未经身份验证加载。如果我在 realm 属性 文件中更改了密码,提示将再次出现,而且仍然只出现一次。我错过了什么?谢谢
标准 HTTP Cookie 和 Servlet 会话行为正在发生。
服务器重启不会导致客户端提供的Cookies失效。您需要配置 Cookie 和 Session 行为以满足您的需要(搜索 SessionCookieConfig
及其类似内容)。