Spring安全性 - 为什么我只能以ROLE_ADMIN而不是ROLE_USER的形式访问页面?

时间:2016-07-15 13:14:03

标签: spring spring-security

在我的应用程序中,我有一个SecurityConfiguration类,它具有以下方法:

protected void configure(HttpSecurity http) throws Exception {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    http.addFilterBefore(filter,CsrfFilter.class);

    http
        .formLogin()
            .loginPage("/login")
            .usernameParameter("ssoId")
            .passwordParameter("password")
            .and()

        .authorizeRequests()

            // I admit that this section needs some work
            .antMatchers("/", "/home/**", "/alert/*", "/scheduler/*", "/agent/*", "/ftp/*", "/smtp/*", "/sql/*").access("hasRole('USER')")
            .antMatchers("/benefit/transport/*", "/contract/*").access("hasRole('ADMIN')")
            .antMatchers("/", "/home/*", "/alert/*", "/scheduler/*", "/agent/*", "/ftp/*", "/smtp/*", "/sql/*").access("hasRole('ADMIN')")
            .antMatchers("/benefit/transport/*", "/contract/*").access("hasRole('ADMIN')")
            .antMatchers("/admin/**").access("hasRole('ADMIN')")
            .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")

            .and()
                .rememberMe().rememberMeParameter("remember-me").tokenRepository(persistentTokenRepository()).tokenValiditySeconds(86400)
            .and()
                .csrf()
            .and()
                .exceptionHandling().accessDeniedPage("/accessDenied");
}

但正如问题所述,我的用户拥有ROLE_ADMIN权限,整个应用程序的访问权限正常。但如果他只有ROLE_USER,则不显示任何页面。

我在这里看不到什么?

1 个答案:

答案 0 :(得分:1)

你想用这些线条做什么?

.antMatchers("/", "/home/**", "/alert/*", "/scheduler/*", "/agent/*", "/ftp/*", "/smtp/*", "/sql/*").access("hasRole('USER')")
.antMatchers("/", "/home/*", "/alert/*", "/scheduler/*", "/agent/*", "/ftp/*", "/smtp/*", "/sql/*").access("hasRole('ADMIN')")

在我看来,你在这里覆盖了你的配置。所以ADMIN角色会在这里覆盖USER角色。