#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/**"
)