在基于版本 1.3.0.BUILD-SNAPSHOT 的 Spring Boot 应用程序中,我有{{1}中的静态资源(images,css,js) } static
下的文件夹。
我看到一些与安全配置相关的示例,如下所示:
resources
这个例子是否正确?
应该是什么影响?
如何验证它是否有效(例如向@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(final WebSecurity web) throws Exception {
web.ignoring()
.antMatchers("/static/**");
}
}
发出请求?
localhost:8080/something
可以做些什么很酷的事情?
答案 0 :(得分:20)
您的示例意味着Spring(Web)安全性是ignoring与您定义的表达式("/static/**")
匹配的网址格式。这个URL被Spring Security跳过,因此不受保护。
允许添加Spring Security应忽略的RequestMatcher实例。 Spring Security提供的Web Security(包括SecurityContext)将无法在匹配的HttpServletRequest上使用。通常,注册的请求应该只是静态资源的请求。对于动态请求,请考虑将请求映射为允许所有用户。
有关详细信息,请参阅WebSecurity API文档。
您可以根据需要保护或保护尽可能多的网址格式 使用Spring Security,您可以为应用程序的Web层提供身份验证和访问控制功能。您还可以限制具有指定角色的用户访问特定URL等。
阅读Spring Security参考资料以获取更多详细信息:
http://docs.spring.io/spring-security/site/docs/current/reference/html/
当将指定的模式与传入请求进行匹配时,匹配将按声明元素的顺序完成。因此,最具体的匹配模式应该是第一位的,最常见的应该是最后一位。
http.authorizeRequests()方法有多个子节点 每个匹配器都按其声明的顺序进行考虑。
模式总是按照定义的顺序进行评估。因此,重要的是在列表中定义的更具体的模式比不太具体的模式更高。
请阅读此处了解更多详情:
http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#filter-security-interceptor
WebSecurity ignoring()
方法的一般用法省略了Spring Security,并且Spring Security的所有功能都不可用。
WebSecurity基于HttpSecurity
(在XML配置中,您可以这样写:<http pattern="/resources/**" security="none"/>
)。
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**")
.antMatchers("/publics/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/publics/**").hasRole("USER") // no effect
.anyRequest().authenticated();
}
上面示例中的WebSecurity让Spring忽略/resources/**
和/publics/**
。因此,HttpSecurity中的.antMatchers("/publics/**").hasRole("USER")
未被考虑。
这将完全省略安全过滤器链中的请求模式。 请注意,与此路径匹配的任何内容都不会应用任何身份验证或授权服务,并且可以自由访问。
模式总是按顺序评估。以下匹配无效,因为第一个匹配每个请求并且永远不会应用第二个匹配:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/**").hasRole("USER")
.antMatchers("/admin/**").hasRole("ADMIN"):
}
答案 1 :(得分:0)
在您共享的代码中,如果您将静态文件(即CSS / JS等)放在名为static的文件夹中,那么所有静态资源都将添加到页面中,而如果您遗漏了
web.ignoring()
.antMatchers("/static/**");
不会加载任何静态资源。
Spring Security非常强大,Spring提供了很好的文档,所以你应该去阅读它,完全理解/理解它。
这是一个 link