我有一个简单的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()
,但它似乎仍然不起作用。