2015-06-30 42 views
1

我想在我的Vaadin應用程序上設置用戶身份驗證,但我不想使用HTML或JSP頁面進行身份驗證。我想使用Vaadin API編寫代碼來捕獲用戶名&密碼並使用更多Java代碼將其提供給Glassfish。到目前爲止,我已經成功地檢索使用這個(基本)代碼來自用戶的用戶名和密碼:在沒有HTML登錄頁面的Vaadin中設置JDBC身份驗證

@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); 
      } 
     }); 

    } 
} 

現在我嘗試使用用戶名/密碼字符串登錄,但我似乎無法找到這是一種手段。我發現這個驚人的文件,概括了我所需要的(在這裏找到:https://blogs.oracle.com/bobby/entry/authentication_without_the_form),但不幸的是,它非常過時,代碼不再存在。我嘗試搜索已使用的「getRequest()。login()」方法,但無法找到支持它的任何Vaadin類。有沒有人曾經這樣做過?任何幫助表示讚賞。

回答

2

我假設您的登錄操作會將用戶重定向到不同的頁面/視圖。

您可以隨時使用會話的setAttribute功能視圖之間傳遞屬性:

getUI().getSession().setAttribute("username", user); 

然後你可以檢索下一個視圖該屬性,讓您可以確定用戶是否已登錄還是不行。

getUI().getSession().getAttribute("username"); 

我不知道你在哪裏存儲帳戶,但不管你使用(數據庫,文本文件等),這種方式應該是有效的。

我建議你看看VaadinSession,因爲會話實際上存儲了你需要的每個數據,直到它到期。

這裏有一些鏈接,可以幫助:

VaadinSession documentation

Setting and reading session attributes

嘗試這些了,如果你需要我可以提供更多的幫助。

+0

我實際上已經意識到它是在該示例中正在執行實際登錄的HttpServletRequest,但您已經提供了一些有用的文檔! – Niko

+0

很高興我可以提供幫助,實際上我正在做一個類似Hibernate和Tomcat的項目,所以如果你需要任何其他的幫助,請問。 :) – tk12

+0

你認爲你可以澄清如何獲取和設置屬性將有助於驗證?我今天重新回答你的答案,並且我正在努力實現你所說的。我正在嘗試使用JDBC用戶/ pw表和JDBC組表來驗證基於組的用戶。我知道如何使用用戶定義的HTML頁面進行認證(FORM認證),但我無法弄清楚如何用普通的'Java代碼來完成同樣的事情。謝謝! – Niko