繁体   English   中英

为什么我在使用 Spring Security 时不显示 Vaadin 中的登录页面

[英]Why Doesn't Login Page In Vaadin Show Up When I'm Using Spring Security

我已经设置了一个基本的 Spring 安全配置:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
          .withUser("user1").password(passwordEncoder().encode("user1Pass")).roles("USER")
          .and()
          .withUser("user2").password(passwordEncoder().encode("user2Pass")).roles("USER")
          .and()
          .withUser("admin").password(passwordEncoder().encode("adminPass")).roles("ADMIN");
    }

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http
          .csrf().disable()
          .authorizeRequests()
          .antMatchers("/**").hasAnyRole("USER", "ADMIN")
          .antMatchers("/login*").permitAll()
          .anyRequest().authenticated()
          .and()
          .formLogin()
          .loginPage("/login").permitAll();

    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

还有一个登录页面:

@Viewport("width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes, viewport-fit=cover")
@Route("login")
@PageTitle("Login")
public class Login extends VerticalLayout {     
   /**
     * 
     */
    private static final long serialVersionUID = 1L;

        public Login(){
            LoginOverlay login = new LoginOverlay(); // 
            login.setAction("login"); // 
            login.setOpened(true); // 
            login.setTitle("Spring Secured Vaadin");
            login.setDescription("Login Overlay Example");
            add(login); 

        }
}

但是当我在没有登录的情况下访问localhost:8080时,Spring 会将我导航到localhost:8080/login

问题是我期待 Vaadin 的内置标准登录布局。 但什么都没有出现。 只是一个白色的空白页。 我忘记了什么吗?

发生这种情况是因为您忘记覆盖SecurityConfiguration类中的configure(WebSecurity web)方法,如教程为 Vaadin 应用程序设置 Spring Security 中所述

/**
 * Allows access to static resources, bypassing Spring security.
 */
@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers(
            // Vaadin Flow static resources // 
            "/VAADIN/**",

            // the standard favicon URI
            "/favicon.ico",

            // the robots exclusion standard
            "/robots.txt",

            // web application manifest // 
            "/manifest.webmanifest",
            "/sw.js",
            "/offline-page.html",

            // (development mode) static resources // 
            "/frontend/**",

            // (development mode) webjars // 
            "/webjars/**",

            // (production mode) static resources // 
            "/frontend-es5/**", "/frontend-es6/**");
}

我建议您通读整个教程系列,也许您也忽略了其他事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM