在WebSecurityConfigurerAdapter中正确使用WebSecurity

时间:2015-08-13 17:53:03

标签: java spring security spring-boot

在基于版本 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可以做些什么很酷的事情?

2 个答案:

答案 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


示例1

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")未被考虑。

  

这将完全省略安全过滤器链中的请求模式。   请注意,与此路径匹配的任何内容都不会应用任何身份验证或授权服务,并且可以自由访问。


示例2

模式总是按顺序评估。以下匹配无效,因为第一个匹配每个请求并且永远不会应用第二个匹配:

@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