如何在Spring Security中允许和保护端点?

时间:2019-03-14 13:39:45

标签: java spring spring-security

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors()
    .and()
    .httpBasic()
    .and()
    .csrf().disable()
    .authorizeRequests()
            //cia apsirasau tuos endpointus kuriuos leidziu neprisijungus:
    .antMatchers("/admin/login", "/admin/register","/teams").permitAll()
    .anyRequest().authenticated()
    .and()
    .exceptionHandling().authenticationEntryPoint(unauthorizedHabdler)
    .and()
    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.addFilterBefore(jwtauthenticationFilter(), UsernamePasswordAuthenticationFilter.class);

}

这是mys configure方法,问题是我想说允许所有人访问/ teams端点,但是当我启动程序并转到/ teams端点时,它要求进行身份验证。问题出在哪里?

1 个答案:

答案 0 :(得分:-1)

根据我的生产代码:P

             .antMatchers("/",
                    "/favicon.ico",
                    "/**/*.png",
                    "/**/*.gif",
                    "/**/*.svg",
                    "/**/*.jpg",
                    "/**/*.html",
                    "/**/*.css",
                    "/**/*.js")
                    .permitAll()
                .antMatchers(HttpMethod.GET, "/swagger-ui.html", "/webjars/**", "/swagger-resources/**", "/v2/**", "/csrf")
                    .permitAll()
                .antMatchers("/api/auth/**")
                    .permitAll()

看到区别,它是 matcher ,它匹配PATTERN(如果给出了模式或表达式),否则为STRING。

在我的代码中,将允许我所有的html,css,js和favicon.ico文件。 另外,我正在使用swagger作为文档,因此将允许所有swagger资源。 而且,我还允许api进行身份验证,例如注册,登录,忘记密码等,这些也将被允许。

现在,我用于登录和注册的api的路径为/api/auth/signup/api/auth/login,在antMatcher中我提到的模式不是auth的确切api。

类似地,如果您想允许/teams及团队之后的所有事物,则将其设为/teams/**,这是一种模式,将与传入的请求URL匹配,并且将被允许。


更新:看,我如何制作antMatchers链,这也可以提高代码的可读性。

我想让任何特定的api只允许对GET请求进行身份验证,而不对其他请求(如POST,PUT等)进行身份验证。那么使用antMatcher代码也可以实现,请参见上文的{{1} }。在这里,所有未经授权的URL都允许未经身份验证,但仅用于GET请求。

我希望它会有所帮助,并让您对其用法有更多了解。