1

我正在尝试启用对我的其余 api 某些部分的匿名访问,但对其余部分禁用它。

我试过配置看起来像:

@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anonymous().and()
    .antMatchers(SOME_URL).authenticated()
    .and()
    .anoymous().disable()
    .antMatchers(OTHER_URL).authenticated();

}

但是后来发现后面的anonymous().disable 会覆盖之前的设置。

那么任何人都可以给我一些建议,我如何为我的部分网址启用匿名?

非常感谢!!!

4

1 回答 1

1

您可以定义一个 RequestMatcher,一个用于公共 url,另一个用于受保护的 url。然后,覆盖接受 WebSecurity 作为参数的配置方法。在这种方法中,您可以将 web 配置为忽略您的公共 url。

private static final RequestMatcher PUBLIC_URLS = new OrRequestMatcher(
    new AntPathRequestMatcher("/public/**")
  );
private static final RequestMatcher PROTECTED_URLS = new NegatedRequestMatcher(PUBLIC_URLS);

 @Override
  public void configure(final WebSecurity web) {
    web.ignoring().requestMatchers(PUBLIC_URLS);
  }

@Override
  protected void configure(final HttpSecurity http) throws Exception {
    http
      .sessionManagement()
      .sessionCreationPolicy(STATELESS)
      .and()
      .exceptionHandling()
      // this entry point handles when you request a protected page and you are not yet
      // authenticated
      .defaultAuthenticationEntryPointFor(forbiddenEntryPoint(), PROTECTED_URLS)
      .anyRequest()
      .authenticated();
      // and other clauses you would like to add. 
}
于 2018-07-20T12:26:05.520 回答