【问题标题】:Spring security - how come I can only access pages as ROLE_ADMIN and not ROLE_USER?Spring security - 为什么我只能以 ROLE_ADMIN 而不是 ROLE_USER 身份访问页面?
【发布时间】:2016-11-18 17:18:00
【问题描述】:

在我的应用程序中,我有一个 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,则不会显示任何页面。

我在这里没有看到什么?

【问题讨论】:

    标签: spring spring-security


    【解决方案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 角色。

    【讨论】:

    • 好吧,这个部分需要做一些工作。我打算为不同的配置文件提供不同的访问权限。 ROLE_ADMIN 将能够访问所有应用程序,但 ROLE_USER 不能。我知道这两行都可以替换为.antMatchers("/", "/home/*", "/alert/*", "/scheduler/*", "/agent/*", "/ftp/*", "/smtp/*", "/sql/*").access("hasAnyRole('ADMIN','USER')")
    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多