Пружинный загрузчик с приводом

#rest #spring-boot #spring-mvc #restful-authentication #spring-boot-actuator

#упор #пружинный загрузчик #spring-mvc #restful-аутентификация #пружинный загрузочный механизм-привод

Вопрос:

У меня есть приложение SpringBoot. 2.1.3.RELEASE, защищенное JWT, я хочу добавить привод. Я добавил эту зависимость

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency> 
  

это мой конфигурационный файл:

 @Profile("api")
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ApiWebSecurityConfig extends WebSecurityConfigurerAdapter {

    private static final Logger LOG = LoggerFactory.getLogger(ApiWebSecurityConfig.class);

    @Autowired
    private JwtAuthenticationEntryPoint unauthorizedHandler;

    @Autowired
    private JwtTokenUtil jwtTokenUtil;


    @Autowired
    private UserSecurityService userSecurityService;

    @Value("${jwt.header}")
    private String tokenHeader;


    @Value("${server.servlet.context-path}")
    private String serverContextPath;

    /** The encryption SALT. */
    private static final String SALT = "fdamp;eekj§sfs23#$1*(_)nof";


    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .userDetailsService(userSecurityService)
                .passwordEncoder(passwordEncoder());
    }


    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(12, new SecureRandom(SALT.getBytes()));
    }


    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }


    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {

         httpSecurity
         // we don't need CSRF because our token is invulnerable
         .csrf().disable()

         .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()

         // don't create session
         .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
         .authorizeRequests()

         // Un-secure H2 Database
         .antMatchers("/h2-console/**/**").permitAll()
         .antMatchers("/auth/**").permitAll()
         .anyRequest().authenticated();


     // Custom JWT based security filter
         JwtAuthorizationTokenFilter authenticationTokenFilter = new JwtAuthorizationTokenFilter(userDetailsService(), jwtTokenUtil, tokenHeader);
         httpSecurity
             .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);


     // disable page caching
     httpSecurity
         .headers()
         .frameOptions().sameOrigin()  // required to set for H2 else H2 Console will be blank.
         .cacheControl();
    }


    @Override
    public void configure(WebSecurity web) throws Exception {
        // AuthenticationTokenFilter will ignore the below paths
        web
            .ignoring()
            .antMatchers(
                HttpMethod.POST,
                "/auth"
            )

            .antMatchers(
                    HttpMethod.GET,
                    "/actuator"
                )


            .antMatchers(
                HttpMethod.POST,
                    "/reg"
            );
    }
}
  

но когда я получаю доступ в postman к http://127.0.0.1:8080/myApp/actuator/

Я получил

 {
    "timestamp": "2019-03-21T16:39:47.877 0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Unauthorized",
    "path": "/myApp/actuator/"
}
  

и HTTP Status 404 – Not Found

при доступе http://127.0.0.1:8080/actuator/

Комментарии:

1. Используете ли вы GET или POST ?

Ответ №1:

По умолчанию URL-адрес:

 http://localhost:8080/actuator
  

попробуйте изменить свою конфигурацию с

         .antMatchers(
                HttpMethod.GET,
                "/actuator"
            )
  

Для

         .antMatchers(
                HttpMethod.GET,
                "/actuator/**"
            )
  

Ответ №2:

Привод Spring boot содержит несколько конечных точек, которые включают работоспособность, показатели и т.д.

Доступ к конечным точкам осуществляется следующим образом;

http://{baseUrl}/autuator/health

http://{baseUrl}/autuator/metrics

итак, получите все конечные точки — http://{baseUrl}/autuator/** [ПОЛУЧИТЬ запрос]

итак, чтобы разрешить доступ к этой конечной точке в вашей конфигурации безопасности, измените конфигурацию с.

             .antMatchers(
                    HttpMethod.GET,
                    "/actuator"
                )
  

Для

             .antMatchers(
                    HttpMethod.GET,
                    "/actuator/**"
                )