在我的spring-boot
+ reactjs
应用中,我已经将spring安全性用于身份验证和角色管理。
应用程序运行正常,但需要成功进行身份验证才能加载下拉列表的值,这些下拉列表是动态的,并且是从数据库表中加载的。实际上,我没有为查询数据库添加任何安全限制。
有人可以帮助我确定问题吗?
这是我的git url
例如,请查看'src/main/java/com/example/polls/controller/FamilyController.java'
我尝试将以下代码放到SecurityConfig.java中,但没有用
http.authorizeRequests()
.antMatchers("/brands").permitAll()
.antMatchers("/familys").permitAll()
.antMatchers("/models").permitAll();
在控制台中,显示
ERROR 9640 --- [io-8080-exec-10] c.e.p.s.JwtAuthenticationEntryPoint : Responding with unauthorized error. Message - Full authentication is required to access this resource
ERROR 9640 --- [nio-8080-exec-1] c.e.p.s.JwtAuthenticationEntryPoint : Responding with unauthorized error. Message - Full authentication is required to access this resource
修改后的代码:
http
.cors()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(unauthorizedHandler)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(
"/",
"/favicon.ico",
"/**/*.png",
"/**/*.gif",
"/**/*.svg",
"/**/*.jpg",
"/**/*.html",
"/**/*.css",
"/**/*.js"
) .permitAll()
.antMatchers("/api/auth/**")
.permitAll()
.antMatchers("/api/user/checkUsernameAvailability", "/api/user/checkEmailAvailability")
.permitAll()
.antMatchers(HttpMethod.GET, "/api/polls/**", "/api/users/**")
.permitAll()
.antMatchers("/api/brands").permitAll()
.antMatchers("/api/familys").permitAll()
.antMatchers("/api/models").permitAll()
.anyRequest()
.authenticated();
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
答案 0 :(得分:2)
您的控制器由"/api/familys"
....
@RestController
@RequestMapping("/api/familys")
public class FamilyController {
....
因此,您的安全模式匹配器应首先从/api/
还要确保在.anyRequest().authenticated();
之前声明此终点的顺序在春季秒内是重要的
.antMatchers(HttpMethod.GET, "/api/polls/**", "/api/users/**").permitAll()
.antMatchers("/api/brands/**").permitAll()
.antMatchers("/api/familys/**").permitAll()
.antMatchers("/api/models/**").permitAll()
.anyRequest()
.authenticated();;