在没有 HTML 登录页面的情况下在 Vaadin 中设置 JDBC 身份验证
Setting up JDBC authentication in Vaadin without an HTML login page
我想在我的 Vaadin 应用程序上设置用户身份验证,但我不想使用 HTML 或 JSP 页面进行身份验证。我想使用 Vaadin API 编写代码来捕获用户名和密码,并使用更多 Java 代码将其提供给 Glassfish。到目前为止,我已经使用此(基本)代码成功地从用户那里检索了用户名和密码:
@Title("test")
@Theme("valo")
public class MyVaadinApplication extends UI {
private String user;
private String pwd;
@WebServlet(value = "/*", asyncSupported = false)
@VaadinServletConfiguration(productionMode = false, ui = MyVaadinApplication.class)
public static class Servlet extends VaadinServlet {
}
@Override
protected void init(VaadinRequest request) {
FormLayout form = new FormLayout();
setContent(form);
TextField nameField = new TextField("Name:");
PasswordField passField = new PasswordField("Password:");
Button button = new Button("Login");
form.addComponent(nameField);
form.addComponent(passField);
form.addComponent(button);
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
user = nameField.getValue();
pwd = passField.getValue();
Notification.show("Name=" + user + ", PWD=" + pwd, Notification.Type.TRAY_NOTIFICATION);
}
});
}
}
现在我正尝试使用 user/pass 字符串登录,但我似乎找不到这样做的方法。我找到了这个非常棒的文档,它准确地概述了我需要的内容(在此处找到:https://blogs.oracle.com/bobby/entry/authentication_without_the_form),但不幸的是它已经过时并且代码不再存在。我尝试搜索使用过的 "getRequest().login()" 方法,但找不到任何支持它的 Vaadin class。以前有人做过吗?感谢任何帮助。
我假设您的登录操作会将用户重定向到另一个 page/view。
您始终可以使用会话的 setAttribute
函数在视图之间传递属性:
getUI().getSession().setAttribute("username", user);
然后您可以在下一个视图中检索此属性,以便您可以确定用户是否已登录。
getUI().getSession().getAttribute("username");
我不确定您将帐户存储在哪里,但无论您使用什么(数据库、文本文件等),这种方式都应该有效。
我建议您查看 VaadinSession,因为该会话实际上会存储您需要的所有数据,直到它过期。
以下是一些可能有帮助的链接:
Setting and reading session attributes
试试这些,如果您需要,我可以提供更多帮助。
我想在我的 Vaadin 应用程序上设置用户身份验证,但我不想使用 HTML 或 JSP 页面进行身份验证。我想使用 Vaadin API 编写代码来捕获用户名和密码,并使用更多 Java 代码将其提供给 Glassfish。到目前为止,我已经使用此(基本)代码成功地从用户那里检索了用户名和密码:
@Title("test")
@Theme("valo")
public class MyVaadinApplication extends UI {
private String user;
private String pwd;
@WebServlet(value = "/*", asyncSupported = false)
@VaadinServletConfiguration(productionMode = false, ui = MyVaadinApplication.class)
public static class Servlet extends VaadinServlet {
}
@Override
protected void init(VaadinRequest request) {
FormLayout form = new FormLayout();
setContent(form);
TextField nameField = new TextField("Name:");
PasswordField passField = new PasswordField("Password:");
Button button = new Button("Login");
form.addComponent(nameField);
form.addComponent(passField);
form.addComponent(button);
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
user = nameField.getValue();
pwd = passField.getValue();
Notification.show("Name=" + user + ", PWD=" + pwd, Notification.Type.TRAY_NOTIFICATION);
}
});
}
}
现在我正尝试使用 user/pass 字符串登录,但我似乎找不到这样做的方法。我找到了这个非常棒的文档,它准确地概述了我需要的内容(在此处找到:https://blogs.oracle.com/bobby/entry/authentication_without_the_form),但不幸的是它已经过时并且代码不再存在。我尝试搜索使用过的 "getRequest().login()" 方法,但找不到任何支持它的 Vaadin class。以前有人做过吗?感谢任何帮助。
我假设您的登录操作会将用户重定向到另一个 page/view。
您始终可以使用会话的 setAttribute
函数在视图之间传递属性:
getUI().getSession().setAttribute("username", user);
然后您可以在下一个视图中检索此属性,以便您可以确定用户是否已登录。
getUI().getSession().getAttribute("username");
我不确定您将帐户存储在哪里,但无论您使用什么(数据库、文本文件等),这种方式都应该有效。
我建议您查看 VaadinSession,因为该会话实际上会存储您需要的所有数据,直到它过期。
以下是一些可能有帮助的链接:
Setting and reading session attributes
试试这些,如果您需要,我可以提供更多帮助。