【问题标题】:spring security 3.2 java configurationspring security 3.2 java配置
【发布时间】:2014-11-17 17:15:55
【问题描述】:

我按照 spring security 3.2 doc 编写示例应用程序。 http.authorizeRequests().anyRequest().authenticated() 这是否意味着任何请求都被拒绝谁没有登录?但我访问它可以访问的任何 url。我缺少什么配置吗?

@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();
    }
}

【问题讨论】:

    标签: java spring-mvc spring-security


    【解决方案1】:

    您可能还没有在战争中注册您的 springSecurityFilterChain。请参阅 Spring Security documentation 中的 3.1.1 部分

    总结一下:

    SecurityConfig 类定义你的 Spring Security 配置。它配置 springSecurityFilterChain 过滤器。

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

    import org.springframework.security.web.context.*;
    
    public class SecurityWebApplicationInitializer
          extends AbstractSecurityWebApplicationInitializer {
    
    }
    

    此后,Spring Security 应该拦截任何 URL 并按照配置应用适当的安全规则。

    【讨论】:

    • 是的,我想念它。谢谢!
    【解决方案2】:

    您可以使用关键字“permitAll”和“hasAnyAuthority”授予对不需要身份验证的特定 RESTFul Url 的访问权限。

               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")
    
          } 
    

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2023-03-05
      • 2017-07-17
      • 2018-07-24
      • 2017-01-21
      • 2013-10-21
      • 1970-01-01
      • 2016-10-24
      • 2014-12-30
      相关资源
      最近更新 更多