0

Spring Security でカスタム JSP ログイン ページを使用するのはかなり簡単です。私たちのアプリケーションは Vaadin に基づいていますが、JSP ログイン ページは必要ありません。私が欲しいのは、Vaadin ウィジェットとして作成されたカスタム ファンシー ログイン ウィンドウです。

技術的には、Vaadin のFormLayout とj_usernamej_passwordなどの名前フィールドを使用できますが、これは JSP ファイルではなく Java クラスなので、http Spring Security 要素で何を指定すればよいでしょうか? つまり:

<http auto-config='true'>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page='MyLoginWindow.java or what?' />
</http>
4

3 に答える 3

1

私は Spring Security にまったく慣れていませんが、Vaadin の担当者の 1 人が数年前にデモ アプリケーションを作成しましたhttps://github.com/peholmst/SpringSecurityDemo。それがまだ最新のものなのか、それともあなたの質問に答えているのかはわかりませんが、そこから何か答えが得られるかどうか、自分の目で確かめてみてください。それ以外の場合は、Petter に個人的に連絡を取り、彼がこのトピックについて新しいアイデアを持っているかどうかを確認することもできます。

于 2012-08-20T06:56:46.433 に答える
1

LoginForm を使用し、LoginListener で次のようなものを使用します

try {
  val authentication = new UsernamePasswordAuthenticationToken(name, pass)
  SecurityContextHolder.getContext.setAuthentication(authenticationManager.authenticate(authentication))
} catch {
  case e: AuthenticationException => {
    SecurityContextHolder.clearContext()
  }
}
于 2012-08-16T17:59:03.343 に答える
1

以下の私のアプローチをご覧ください。このコードは、ログイン ボタンをクリックしたときに発生する機能を示しています。

loginBtn.addListener(new Button.ClickListener() {            
        @Override
        public void buttonClick(ClickEvent event) {
            // Getting the helper for working with spring context
            // found here https://vaadin.com/wiki/-/wiki/Main/Spring%20Integration   
            SpringContextHelper helper = new SpringContextHelper(getApplication());

            // Get the providerManagerBean
            ProviderManager authenticationManager = (ProviderManager)helper
                    .getBean("authenticationManager");

            // Get entered data for name and password
            String name = usernameEntered;
            String password = passwordEntered;

            // Validation
            if (StringUtils.isBlank(name) || StringUtils.isBlank(password)) {
                getWindow().showNotification("Username or password cannot be empty", 
                        Notification.TYPE_ERROR_MESSAGE);
            } else {
                try {
                    // Security functionality goes here
                    UsernamePasswordAuthenticationToken token = 
                            new UsernamePasswordAuthenticationToken(name, password);

                    Authentication authentication = authenticationManager.authenticate(token);

                    // Set the authentication info to context      
                    SecurityContextHolder.getContext().setAuthentication(authentication);

                    // During the authentification the AppUser instance was set as 
                    // details, for more info about the user
                    AppUser user = (AppUser) authentication.getDetails();                        

                    if (user != null) {
                        // Switch the view after succesfull login
                        getApplication().getMainWindow().setContent(new ComboBoxUserStartsWith());

                    }
                } catch (AuthenticationException e) {
                    // Display error occured during logining
                    getWindow().showNotification(e.getMessage(), Notification.TYPE_ERROR_MESSAGE);
                }
            }
        }
    });
于 2012-08-22T12:46:11.957 に答える