Spring Boot-仅允许经过身份验证的用户访问资源

时间:2018-11-06 03:44:33

标签: java spring spring-boot spring-security

我有一个简单的Spring Boot应用程序,其目录如下:

+ src
  + main
    + java
    + resources
      + public
         + images
            - dog.png
      + private
         + images
            - cat.png
      + templates
         - home.html
         - login.html

每个人都可以访问公用文件夹中的资源。我想使专用文件夹中的资源仅由经过身份验证的用户访问。

例如,home.html只能由具有图像cat.png的经过身份验证的用户访问。如果未经授权的用户尝试通过https://localhost:8080/private/images/cat.png直接访问资源,则服务器将拒绝该请求。

我的WebSecurityConfig.java

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
                .antMatchers("/", "/home").permitAll()
                .antMatchers(HttpMethod.GET, "/resources/private/images/cat.png").authenticated()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
        auth.inMemoryAuthentication()
                .withUser("user").password(encoder.encode("password")).roles("USER");
    }

}

我也尝试过使用antMatchers.("/resources/private/**").authenticated(),但它似乎仍然不起作用。

0 个答案:

没有答案