我一直在尝试配置Spring Boot安全性,以便允许某些URL不需要身份验证,并且不允许任何其他请求不经过身份验证。我在实现此目标方面遇到困难。
据我了解,anyRequest()。authenticated()要求先前声明的antMatchers要求认证。
如何实现我的要求。
我的Http安全配置
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable().authorizeRequests()
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
.antMatchers(HttpMethod.POST,SIGN_UP_URL).permitAll()
.antMatchers(HttpMethod.GET,banner_top_url).permitAll()
.antMatchers(HttpMethod.GET,banner_bottom_url).permitAll()
.antMatchers(HttpMethod.GET,javascript_url).permitAll()
.antMatchers(HttpMethod.GET,stylesheet_url).permitAll()
.antMatchers(HttpMethod.GET,photos_url).permitAll()
.antMatchers(HttpMethod.GET,transformed_photos_url).permitAll()
.antMatchers(HttpMethod.GET,preview_url).permitAll()
.antMatchers(HttpMethod.GET, "/", "/**/*.html", "/static/favicon.ico", "/**/*.js", "/**/*.js.map", "/**/*.css", "/**/*.png", "/**/*.jpg", "/**/*.jpeg", "/**/*.gif", "/**/*.ttf", "/**/*.json", "/**/*.woff", "/**/*.woff2", "/**/*.eot", "/**/*.svg").permitAll()// allows static content from resource folder
.antMatchers("/error").permitAll() // By default Security framework disables error pages (Unauthrorized)
.anyRequest().authenticated()
.and()
.exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
.and().addFilterBefore(jwtExceptionHandler,CorsFilter.class)
.addFilter(new JWTAuthorizationFilter(authenticationManager()))
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
// this disables session creation on Spring Security
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().formLogin().disable();
}
我假设必须授予以下URL未经身份验证的访问权限。 SIGN_UP_URL banner_top_url banner_bottom_url javascript_url stylesheet_url photos_url transform_photos_url Preview_url
问题是这行:.anyRequest()。authenticated() 如果删除它,则REST接口中的所有端点都可以使用,而无需身份验证,这是我不希望的。
答案 0 :(得分:0)
为什么不通过web.ignoring全局排除静态资源文件?
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
答案 1 :(得分:0)
默认情况下,Spring-security允许传递所有内容。您必须告诉Spring什么可以通过,什么不能通过。通过删除anyRequest()。authenticated,您可以告诉Spring与您提到的模式匹配的所有内容都可以进行,而其余的则默认执行您的操作,即继续。这是Spring Security文档:https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-httpsecurity
答案 2 :(得分:0)
我发现Spring-Working符合预期。话虽如此,任何antMatcher都将匹配requestPath,而不匹配resourcePath。下面提供了一个示例。
*localhost:8080/image.jpg*
指向应用程序的根目录 src / main / resources / static / image.jpg
现在为什么将static用作资源处理程序,这是因为在 staticResourceConfiguration.java 类中,我有以下几行 注册表 .addResourceHandler(“ / resources / **”) .addResourceLocations(“ / resources /”);
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");