为什么需要身份验证才能加载数据库值?

时间:2019-01-05 05:23:57

标签: java spring reactjs spring-boot spring-security

在我的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);

1 个答案:

答案 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();;