Spring Security 筛选链问题

velaa5lx  于 2022-12-04  发布在  Spring
关注(0)|答案(1)|浏览(138)

我在Spring应用程序中为过滤器链配置了以下配置:

@Configuration
protected static class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            
        http
            .httpBasic()
                .and()
            .authorizeHttpRequests()
                .requestMatchers("/createuser", "/index.html", "/", "/home", "/login", "/*.css", "/*.js", "/favico.ico").permitAll()
                .anyRequest().authenticated()
                .and()
            .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
        return http.build();
    }
}

我不明白它是如何工作的,我想添加其他的安全约束,例如匹配路径/api/admin/*,并要求这些请求的角色为ADMIN。我该怎么做呢?
我见过hasRole(String role)方法,但我不明白如何在我的情况下使用它?

xmd2e60i

xmd2e60i1#

要向Spring应用程序添加其他安全约束,您可以使用FilterChainProxy指定应应用于传入请求的规则。例如,如果您希望对/api/admin/*路径的请求要求ADMIN角色,则可以向FilterChainProxy添加以下配置:

http.authorizeRequests()
.antMatchers("/api/admin/*").hasRole("ADMIN")
.anyRequest().authenticated();

在此配置中,antMatchers方法用于指定安全约束应匹配的路径模式。然后,hasRole方法用于指定只允许具有ADMIN角色的用户访问匹配路径。最后,anyRequest方法用于将已验证的约束应用于所有其他请求。这意味着它们必须经过身份验证(但不一定具有特定角色)。
如果要指定用户访问匹配路径所必须具有的特定授权(如权限或特权),也可以使用hasAuthority方法代替hasRole

相关问题