如何解决Vaadin 登录覆盖
我对 java 和 vaadin 都很陌生。希望能够得到一些关于如何改进我的代码的好技巧。 我想重写下面的代码以使用 Vaadin 的 -> LoginOverlay 而不是下面的代码。
正如我所说,我正在努力学习,所以我使用了此示例的代码:https://www.youtube.com/watch?v=oMKks5AjaSQ&t=1158s
然而,LoginOverlay 似乎是一种更好的方式来显示其登录部分。如本例所示:https://www.youtube.com/watch?v=pteip-kZm4M
所以我的问题是如何将下面的代码编写为 LoginOverlay。
public class LoginView extends Div {
public LoginView(AuthService authService) {
setId("login-view");
var username = new TextField("Username");
var password = new PasswordField("Password");
add(
new H1("Welcome"),username,password,new Button("Login",event -> {
try {
authService.authenticate(username.getValue(),password.getValue());
UI.getCurrent().navigate("home");
} catch (AuthService.AuthException e) {
Notification.show("Wrong credentials.");
}
}),new RouterLink("Register",RegisterView.class)
);
}
}
我只是为了转换代码才走到这一步。
对代码新部分的说明。该代码不起作用。 loginOverlay.addLoginListener (event -> 可能需要以不同的方式编写的部分。 如果有任何帮助,我正在使用 IntelliJ 2020.3.4。
public class LoginView2 extends Composite<LoginOverlay> {
public LoginView2(AuthService authService) {
setId("login-view");
LoginOverlay loginOverlay = getContent();
loginOverlay.setTitle("Welcom");
loginOverlay.setDescription("Manage your business tasks");
loginOverlay.setOpened(true);
loginOverlay.addLoginListener(event -> {try {
if(authService.authenticate(username.getValue(),RegisterView.class);
}
}
}
}
解决方法
复制粘贴代码片段而不知道代码的作用是灾难的秘诀,尤其是在安全方面。
您的代码中存在各种错误:大括号错位、使用了不存在的变量以及 RouterLink
远离它所属的位置。
我知道您必须从某个地方开始。我建议从实际编译的代码开始,然后逐渐添加内容,在每一步测试您目前拥有的内容。
以下是有关您的 LoginView2
的一些提示:
- 删除整个
loginOverlay.addLoginListener(...)
代码,包括authService.authenticate
调用和RouterLink
。确保此时您可以运行该应用程序,并且您可以看到登录叠加层。 - 重新添加登录侦听器,但现在只在其中显示通知。测试您是否可以运行该应用程序,如果您点击登录,您的通知就会显示。
loginOverlay.addLoginListener(event -> {
Notification.show("This is working");
});
-
实施身份验证。您在 if 语句中调用了
authService.authenticate(...)
,但该方法不返回任何内容。相反,如果身份验证失败,它会抛出异常,因此是 try-catch。这意味着在try { ... }
块内,您在authService.authenticate(...)
调用之后放置的任何代码仅在没有抛出异常(即身份验证成功)时才会执行。 -
没有
username
或password
变量。第一个 YouTube 视频以文本字段的形式定义了这些变量。使用登录叠加层,它会为您创建这些字段,那么您如何从中获取相应的值?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。