Spring REST Security:仅在特定端点

时间:2016-11-11 00:24:37

标签: java spring spring-mvc spring-security spring-restcontroller

我已经为我的REST API配置了Spring Security(使用HeaderHttpSessionStrategy)。

我的WebSecurityConfigurerAdapter'实现如下所示。

@Override
    protected void configure(HttpSecurity http) throws Exception {

        http

            .csrf().disable()

            .authorizeRequests()
                .antMatchers("/user/**").authenticated()
                .antMatchers("/**").permitAll()

                .and()
            .requestCache()
                .requestCache(new NullRequestCache())
                .and()

            .httpBasic()
            ;

    }

现在,我该如何配置' HttpSecurity'对象,以便只有特定端点才能进行基本身份验证。

例如:

/ user / login :只能在此端点进行基本身份验证。在成功验证后,将返回x-auth-token标头。

/ user / create :客户端无法在此端点上进行身份验证。只能返回401.Can只能使用' x-auth-token'使用/ user / login端点创建。

2 个答案:

答案 0 :(得分:6)

您可以定义多个WebSecurityConfigurerAdapter。优先级较高的一个,它具有一个请求匹配器,可以将适用性限制为/user/login,如:http.requestMatcher(new AntPathRequestMatcher("/user/login")),另一个优先于其余部分。您可以省略requestMatcher以使http定义不受限制。

答案 1 :(得分:0)

您必须始终定义从特定到通用的限制。在您的情况下,它应该是对通用安全检查的特定URL检查。

  1. 您应配置并允许登录/注册网址。
  2. 你应该避免使用pattern / **来允许所有人。而是单独配置静态资源URL。
  3. 您应该最终应用更多通用限制,例如您在URL,/ user / **上提到的要进行身份验证并具有某些角色的限制。

      @Override
      protected void configure(HttpSecurity http) throws Exception {
    
    http
    .csrf().disable()
    .authorizeRequests()
    .antMatchers("/user/login, /user/signup, /logout").permitAll()
    .antMatchers("/user/**").hasRole("ADMIN")
    .and()
    .requestCache()
    .requestCache(new NullRequestCache())
    .and()
    
        .httpBasic();
    

    }