2014-11-15 114 views
1

我遵循spring security 3.2 doc编写一个示例应用程序。 http.authorizeRequests()。anyRequest()。authenticated()是否意味着任何请求都拒绝谁不登录?但我访问任何可访问的网址。配置我已经失踪了吗?spring security 3.2 java配置

@Configuration 
public class SpringWebMVCApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class[] { SecurityConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class[] { WebConfig.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 

}

用SpringMVC配置

@Configuration 
@EnableWebMvc 
@ComponentScan("org.jxs.mm.controller") 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/assets/**").addResourceLocations("/assets/"); 
     registry.addResourceHandler("/favicon.ico").addResourceLocations("/favicon.ico"); 
    } 

} 

春季安全配置

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
     .authorizeRequests() 
      .anyRequest().authenticated(); 
    } 
} 

回答

0

你可能还没有在战争中注册你的springSecurityFilterChain。请参见3.1.1节中的Spring Security documentation

总结:

SecurityConfig类定义你的春季安全配置。它配置了springSecurityFilterChain过滤器。

但是,此过滤器链需要应用于/注册到/与您的应用程序中的所有URL相关联(以便URL被springSecurityFilterChain拦截)。这可以通过像这样延伸AbstractSecurityWebApplicationInitializer来完成:

import org.springframework.security.web.context.*; 

public class SecurityWebApplicationInitializer 
     extends AbstractSecurityWebApplicationInitializer { 

} 

在此之后,春季安全应该截获任何URL和配置应用适当的安全规则。

+0

是的,我很想念它。谢谢! – user1434702

0

您可以授予访问特定的REST风格的URL,它需要用关键词 “permitAll” 没有认证“hasAnyAuthority”用于这些页面。

  http 
      .formLogin() 
        .loginPage("/signin") 
        .loginProcessingUrl("/signin/authenticate") 
        .failureUrl("/loginfail") 
        // Grant all access to login url 
        .permitAll() 
        .and() 
       .logout() 
       .logoutUrl("/signout") 
       .logoutSuccessUrl("/signin") 
       .and() 
       .authorizeRequests() 
        .antMatchers("/foo/**").permitAll() //No authentication required 
        .antMatchers("/").hasAnyAuthority("ROLE_USER","ROLE_ADMIN") //Authentication required (access granted to users with role "ROLE_USER" or "ROLE_ADMIN") 

     } 
+0

仍然可以使用您的代码访问根网址。 – user1434702

相关问题