@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端点时,它要求进行身份验证。问题出在哪里?
答案 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请求。
我希望它会有所帮助,并让您对其用法有更多了解。